PDA

View Full Version : [C++] - error C2597 se cerco di istanziare un oggetto


Re_Kotc
13-07-2010, 12:27
ciao a tutti, ho una classe A e ho definito in A.h la seguente variabile

CollisionCallback* mBumpcarCallback;

che appartiene alla classe CollisionCallback di cui ho incluso l'header in A.h

ora in A.cpp cerco di istanziare la variabile con:

mBumpcarCallback = new CollisionCallback(BT_BUMPCAR);

e mi restituisce un errore in compilazione:

error C2597: riferimento non valido al membro non statico 'Bumpcar::mBumpcarCallback'

se allora dichiaro in A.h la variabile come static ottengo:

error LNK2001: simbolo esterno "protected: static class CollisionCallback * Bumpcar::mBumpcarCallback" (?mBumpcarCallback@Bumpcar@@1PAVCollisionCallback@@A) non risolto

dove sbaglio?..

Albi89
13-07-2010, 12:54
Per quanto riguarda il secondo errore, il simbolo mBumpcarCallback non è risolto; probabilmente dovresti semplicemente aggiungere CollisionCallback* Bumpcar::mBumpcarCallback = 0;
nell'implementazione della classe (il nostro A.cpp), ovviamente al di fuori dal corpo di qualsiasi funzione: un membro statico dichiarato nel corpo di una classe va sempre definito esternamente (omettendo la keyword static).

Il primo errore invece è più delicato, e servirebbe qualche dettaglio in più: un possibile motivo potrebbe essere che l'istruzione incriminata mBumpcarCallback = new CollisionCallback(BT_BUMPCAR); è svolta in un metodo statico: chiaramente non può fare riferimento ad un membro non statico (cioè raggiunto tramite this) perché il metodo statico non riceve this come parametro!
Se invece l'istruzione è in un metodo NON statico, serve qualche dettaglio in più: dichiarazione della classe da A.h, e almeno uno stralcio del metodo che esegue quel codice.

Re_Kotc
13-07-2010, 13:09
mi hai aperto gli occhi!...in effetti l'istruzione si trovava all'interno di un metodo statico subdolo (sembrava il costruttore!, il codice non è mio) e quindi giustamente non esisteva nessun oggetto this e di conseguenza era impossibile accedere a quel membro..ho spostato l'istruzione nel costruttore e sono a posto :) ti ringrazio molto!