2013-08-25 15 views
12

Załóżmy, że mam plik .hpp zawierający prostą klasę z publiczną metodą statyczną i prywatnym statycznym członkiem/zmienną. Jest to klasa przykład:C++ Dostęp do prywatnego statycznego elementu z publicznej statycznej metody?

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

I kiedy zadzwonić:

int Result = MyClass::DoSomethingWithTheVar(); 

Spodziewam się, że "Wynik" jest równa 10;

Zamiast dostać (w linii 10):

undefined reference to `MyClass::TheVar' 

Linia 10 jest "TheVar = 10;" z metody.

Moje pytanie brzmi: czy możliwe jest uzyskanie dostępu do prywatnego statycznego elementu (TheVar) metodą statyczną (DoSomethingWith TheVar)?

+4

nie ma to nic wspólnego z dostępem lub ustronnym. Ma to związek z absencją definicji "TheVar". Zostało to zadeklarowane. – sehe

Odpowiedz

17

Odpowiedź na twoje pytanie brzmi: tak! Po prostu brakowało, aby zdefiniować statyczny element TheVar:

int MyClass::TheVar = 0; 

W pliku cpp.

Należy szanować numer One definition rule.

Przykład:

// 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

Dziękuję za odpowiedź :) Próbowałem, jednak zawsze otrzymuję komunikat o błędzie mówiąc, że nie mogę uzyskać dostępu do TheVar, ponieważ był prywatny. Powodem było to, że zawsze zapomniałem wpisać typ (int) na początku, więc kompilator prawdopodobnie pomyślał, że chcę uzyskać dostęp do tego prywatnego członka. (Epicki błąd przepraszam, że przeszkadza) –

+0

@SanduLiviuCatalin Więc twój problem został rozwiązany teraz? [Przykład] (http://ideone.com/V58sWe) tego działającego :) –

+0

Tak. Czekam na 15 minut, abym mógł oznaczyć to jako rozwiązane. –