2013-08-25 7 views
12

Diciamo che ho un file .hpp contenente una classe semplice con un metodo statico pubblico e una variabile/membro statico privato. Questa è una classe di esempio:C++ Accesso al membro statico privato dal metodo statico pubblico?

class MyClass 
{ 
public: 
    static int DoSomethingWithTheVar() 
    { 
     TheVar = 10; 
     return TheVar; 
    } 
private: 
    static int TheVar; 
} 

E quando io chiamo:

int Result = MyClass::DoSomethingWithTheVar(); 

Mi aspetterei che "Risultato" è pari a 10;

Invece ottengo (a riga 10):

undefined reference to `MyClass::TheVar' 

linea 10 è "Thevar = 10;" dal metodo.

La mia domanda è se è possibile accedere a un membro statico privato (TheVar) da un metodo statico (DoSomethingWithTheVar)?

+4

non ha niente a che fare con l'accesso o di privatezza. Ha a che fare con l'assenza di una definizione di "TheVar". È stato solo dichiarato. – sehe

risposta

17

La risposta alla tua domanda è sì! È appena perso per definire il membro statico TheVar:

int MyClass::TheVar = 0; 

In un file cpp.

Rispettare lo One definition rule.

Esempio:

// Myclass.h 
class MyClass 
{ 
public: 
    static int DoSomethingWithTheVar() 
    { 
     TheVar = 10; 
     return TheVar; 
    } 
private: 
    static int TheVar; 
}; 

// Myclass.cpp 
#include "Myclass.h" 

int MyClass::TheVar = 0; 
+0

Grazie per la risposta :) L'ho provato, tuttavia ricevo sempre un errore che dice che non posso accedere a TheVar perché è privato. La ragione è che ho sempre dimenticato di inserire il tipo (int) all'inizio, quindi il compilatore probabilmente pensava che volessi accedere a quel membro privato. (Errore epico scusa per il disturbo) –

+0

@SanduLiviuCatalin Quindi il tuo problema è risolto ora? [Un esempio] (http://ideone.com/V58sWe) di questo lavoro :) –

+0

Sì. Sto aspettando di diventare 15 minuti in modo che possa contrassegnarlo come risolto. –