2013-08-25 270 views
12

比方說,我有一個包含有公共靜態方法和私人靜態成員/變量的簡單類.HPP文件。 這是一個例子類:C++從公共靜態方法訪問私有靜態成員?

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

當我打電話:

int Result = MyClass::DoSomethingWithTheVar(); 

我會認爲 「結果」 等於10;

相反,我得到(在線路10):

undefined reference to `MyClass::TheVar' 

線10是 「TheVar = 10;」從該方法。

我的問題是,如果它可以從一個靜態方法(DoSomethingWithTheVar)訪問私有靜態成員(TheVar)?

+4

它什麼都沒有做訪問或私有性。它與「TheVar」的定義無關。它只被宣佈。 – sehe

回答

17

你的問題的答案是肯定的!您錯過了定義靜態成員TheVar

int MyClass::TheVar = 0; 

在cpp文件中。

這是尊重One definition rule

例子:

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

謝謝你的答案:)我試過,但我總是得到一個錯誤說,我無法訪問TheVar,因爲它是私有的。原因是我總是忘記把類型(int)放在開頭,所以編譯器可能認爲我想訪問該私有成員。 (史詩錯誤抱歉打擾) –

+0

@SanduLiviuCatalin所以你的問題現在解決了? [一個例子](http://ideone.com/V58sWe)這個工作:) –

+0

是的。我等待15分鐘,以便我可以將其標記爲已解決。 –