如何从公共静态方法中访问私有静态成员变量?(C++)

23

假设我有一个.hpp文件,其中包含一个简单的类,具有公共静态方法和私有静态成员/变量。

这是一个示例类:

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

当我呼唤时:

int Result = MyClass::DoSomethingWithTheVar();

我希望"Result"等于10;

但实际上在第10行出现了如下错误:

undefined reference to `MyClass::TheVar'

第10行是来自该方法的"TheVar = 10;"。

我的问题是是否可能从一个静态方法(DoSomethingWithTheVar)中访问私有静态成员(TheVar)?


5
这与访问或私密性无关,而是与TheVar的定义缺失有关。它只被声明了。 - sehe
1个回答

25

回答您的问题是:是的!您只是忘记定义静态成员变量 TheVar

int MyClass::TheVar = 0;
在一个 cpp 文件中。
其目的是遵守 单一定义规则
例如:
// 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;

谢谢您的回答 :) 我尝试了,但是我总是收到一个错误,说我无法访问TheVar,因为它是私有的。原因是我总是忘记在开头放置类型(int),所以编译器可能认为我想访问该私有成员。(糟糕的错误,抱歉打扰了) - SLC
@SanduLiviuCatalin 你的问题解决了吗?这是一个例子,演示了它的工作原理 :) - Pierre Fourgeaud
是的,我正在等待成为15分钟大的时候,这样我就可以将其标记为已解决。 - SLC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接