C++从公共(public)静态方法访问私有(private)静态成员?

标签 c++ class static private member

假设我有一个 .hpp 文件,其中包含一个带有公共(public)静态方法和私有(private)静态成员/变量的简单类。 这是一个示例类:

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) 访问私有(private)静态成员 (TheVar)?

最佳答案

对您的问题的回答是肯定的!您只是错过了定义静态成员 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;

关于C++从公共(public)静态方法访问私有(private)静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18433752/

相关文章:

c++ - LMDB Seek(移动光标)而不读取

c++ - 以编程方式告诉 Windows XP 待机

c++ - 在 C++ 中减小大小/压缩 JSON 字符串

c++ - 在它所在的类之外声明一个嵌套类?

ruby - 为什么从类中调用setter方法时可以更改方法名称?

c++ - 如何使用 boost iostreams 进行流式解压缩

python - 嵌套在函数和属性查找中的类

java - 为什么有两种不同的方式来创建内部类的实例?

java - 在类中设置变量

java - 为什么通过实例调用静态方法不会给 Java 编译器带来错误?