Newsgroup: it.comp.lang.c++
Titolo: Puntatori

Ciao a tutti,
sono ancora all'inizio nello studio del C++ e non riesco a risolvere un
"banalissimo" e "stupidissimo" problema. Mi date una mano? Grazie.
Come faccio a richiamare una funzione di una classe dall'interno di una
funzione di un altra classe?
Esempio:
Ho una classe CMsgDlg con funzione membro public OnOK(). Dall'interno di
OnOK() voglio richiamare la funzione membro public Onpippo() appartenente
alla classe CprogDoc. Ho provato in questo modo:
        CprogDoc ciccio;
        ciccio.Onpippo();
.... ma il compilatore mi segnala un errore.
Come devo fare? Grazie per l'aiuto.
Ciao, Lallo

 .... ma il compilatore mi segnala un errore.
Inanzitutto, non e' mai utile dire "mi segnala un errore" (poveri 
scrittori di compilatori, fanno del gran lavoro per dare dei messaggi 
significativi, e poi uno li liquida cosi'... :P). Cmq la sintassi e' 
giusta. Non e' detto pero' che sia quello che ti serve... in questo modo 
crei una nuova istanza di CprogDoc, e chiami Onpippo li' - molto 
probabilmente, invece, quel che ti serve e' lavorare su un'istanza gia' 
esistente (parlo cosi' ad intuito, eh...)
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003


Grazie per avermi risposto. Provo a darti i messaggi di errore precisi:
J:\prog\MsgDlg.cpp(50) : error C2065: 'CprogDoc' : nichtdeklarierter
Bezeichner
J:\prog\MsgDlg.cpp(50) : error C2146: Syntaxfehler : Fehlendes ';' vor
Bezeichner 'ciccio'
J:\prog\MsgDlg.cpp(50) : error C2065: 'ciccio' : nichtdeklarierter
Bezeichner
J:\prog\MsgDlg.cpp(51) : error C2228: Der linke Teil von '.Onpippo' muss
eine Klasse/Struktur/Union sein
Fehler beim Ausführen von cl.exe.
prog.exe - 4 Fehler, 0 Warnung(en)
Il primo errore dice, tradotto dal tedesco, che l'Identificatore CprogDoc
non è stato dichiarato. Ma come non è stato dichiarato? CprogDoc è una
classe che è stata creata automaticamente dal programma ..C++. .... boh?!
Sai cosa vuole cercare di comunicarmi questa bestia di compilatore?
Ciaooo, Lallo

 classe che è stata creata automaticamente dal programma ..C++. 
Mi sa che usi Microsoft Visual C++ :) e il ClassWizard...
Comunque, se dici che la classe e' stata definita, ricorda che per 
_usarla_ devi includere il relativo header file.
Nel file sorgente cpp che ti da' errore, hai inserito:
#include "progdoc.h" 
(o come si chiama il file header della classe CprogDoc) ?
<Nota_di_naming>
Mi sa che usi la convenzione ungherese della libreria MFC, per cui il 
primo carattere di un identificatore di classe e' "C". ...Forse sarebbe 
meglio chiamare la classe CProgDoc (piu' leggibile...).
</Nota_di_naming>
Ciao
Dan

 [CUT]
Scusa, ma cosa c'entrano i "Puntatori" [subject] con il tuo quesito...? 
:)
Ciao
Dan

 esistente (parlo cosi' ad intuito, eh...)
Anche io ho lo stesso "intuito" a riguardo :)
Anche perche' lo scope di quella istanza "ciccio" e' locale al metodo, 
quindi puoi quella istanza viene distrutta dopo la graffa...
Forse servirebbe un puntatore ad una istanza (gia' creata) di CprogDoc:
CprogDoc * ciccio; // gia' esistente
Nell'handler OnOK() dai "ciccio->Onpippo();"

L'unica cosa che ho capito e' che sei alle prese con le MFC e l'unico 
consiglio che mi sento di darti e' di non usarle :)

 :)
mah ... a me sembra sostanzialmente un problema di puntatori, cioč nel senso
che bisogna trovare l'indirizzo esatto di quella funzione per poterla
eseguire, ... sbaglio?
Grazie ancora.
Ciao, Lallo


in effetti, come ho già spiegato a Belletti, è proprio così, grazie anche a
te Dan
Ciao, Lallo

 meglio chiamare la classe CProgDoc (piu' leggibile...).
come? non ho capito. Si, cosě mi dicono, che la prima lettera di una classe
dovrebbe essere la C, forse per una migliore comprensione del codice. In
effetti come vedi gli ho dato il nome CprogDoc
Ciao, Lallo


infatti, hai proprio ragione, ho aggiunto alla classe CMsgDlg una variabile
membro *ciccio di tipo CprogDoc ed ho poi richiamato la funzione Onpippo()
in
questo modo: ciccio->Onpippo();  .
Grazie, grazie, grazie infinite.
Ciao, Lallo

 effetti come vedi gli ho dato il nome CprogDoc
Dopo la C iniziale si riparte con una maiuscola: CProgDoc, CPennello, 
CUnaClasse ...

 Grazie ancora.
Di niente
Ciao,
Dan

, 
lam...@hotmail.com
 
says...

Prego.
Comunque, sempre riguardo il naming, si usa OnXxxxYyyyy() ...cioe':
OnPippo(), OnUnaQualcheCosa() che e' piu' leggibile rispetto a Onpippo
(), Onunaqualchecosa()...