2013-08-25 220 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分钟,以便我可以将其标记为已解决。 –