Newsgroup: it.comp.lang.c++
Titolo: Richiamare una funzione da un'altra funzione

Ciao a tutti,
ho bisogno di una illuminazione da parte vostra.
Ho dichiarato una classe X, che comprende una funzione membro f().
Ho bisogno di chiamare f() e poi, ad un certo punto del codice di f(),
devo richiamare un'altra funzione g(), ma non so come fare:
class X{
	int n;
	public:
	virtual void f();
}
void X::f()
{
	n=100;
	g();  //??????
}
main()
{
X x;
x.f();
}
La funzione g() deve operare sui dati di X.
Ad esempio voglio che il corpo di g() comprenda:  n=n+1;
Come dichiaro ed uso g()??
Ho provato a dichiararla come membro di X ma non riesco a richiamarla.
da f().
Ho provato con le funzioni friend, ma mi sa che non mi e' ben chiara la
sintassi.
Un grazie a chi mi aiutera'
-- 
Saluti 	 		      << Linux Powered >>			 
LIBRA               e-mail: metti "libero" al posto di "NOSPAM"  

 devo richiamare un'altra funzione g(), ma non so come fare:
non ho capito che vuoi fare.
se vuoi solo che g() sia una funzione membro non puoi fare cosě?
:
class X {
private:
int n;
public;
void f();
void g();
};
e definire X::f e X::g?
se vuoi invece che sia una funzione a parte potresti fare in modo che riceve il puntatore della classe, ma devi rendere n pubblico,
o scriverti una funzione pubblicadi X per impostare il valore di n. es:
void X::setNvalue(int n_newval)
{ n = n_newval; }
e poi la funzione g:
void g(X* pt)
{
    pt->setNvalue( pt->getNvalue()+1 );
}
se ho capito male ignora la mia risposta e spiegati meglio
ciao
xaero

o scriverti una funzione pubblicadi X per impostare il valore di n. es:
Io ho risolto piu' o meno cosi', pero' ho dovuto usare this, e non e'
che mi piaccia molto. 
Se infatti dal corpo di f() richiamo g() passandogli come parametro la
classe cui f() appartiene, mi dice che non e' definita.
Ovvero.
main()
{
X  x;
   x.f();   
}
void X::f()
{
n=100
g(&x)    // mi dice che x non e' definita. Se invece uso this funziona 	
}	
Spero di essere stato piu' chiaro.


 Ho dichiarato una classe X, che comprende una funzione membro f().
[cut]
Quello che ti serve è questo?
#include <iostream>
class X {
        public :
        virtual void f();
        void g();
        int n;
};
X x;
void X::g () {
        std::cout << "g() chiamata" << std::endl;
        n++;
        std::cout << "n vale: " << n << std::endl;
};
void X::f () {
        n = 100;
        std::cout << "f() chiamata" << std::endl;
        std::cout << "n vale: " << n << std::endl;
        std::cout << "adesso chiamo g()" << std::endl;
        x.g();
};
int main () {
        x.f();
        return 0;
}
-- 
Luigi
bug windows [5] = {"95", "98", "NT", "Me", "2000"};

 }
Mi sembra che tu g() l'hai definita void, se č cosě, come fai a chiamarla 
con un parametro (&x) ?
Ciao


con un parametro (&x) ?
L'avevo definita void nell'esempio precedente, in questo esempio sarebbe
definita come g(X*).
Cmq, credo che l'altro tuo post sia quello che cercavo.
Ti faro' sapere, e per il momento ti ringrazio dell'attenzione.


};
Ok, ma se io volessi che n sia private invece che public?


 Ok, ma se io volessi che n sia private invece che public?
metti
private :
prima di int n;
ciao


prima di int n;
Ok, grazie mille. Ora funziona.
Avevo fatto un errore nel Makefile e quindi non capivo perche' non
funzionasse come mi dicevi.
