如何通过类构造函数访问私有静态成员变量

How I can access a private static member variable via the class constructor?

本文关键字:静态成员 变量 访问 何通过 构造函数      更新时间:2023-10-16

如何从构造函数或通常从其他成员函数使用和修改s_member私有静态变量?

这就是我尝试过的。

a.h:

#ifndef A_H
#define A_H
#include <set>
class A
{
    public:
        A();
        virtual ~A();
    private:
        static std::set<int> s_member;
};
#endif

a.cpp:

#include "a.h"
A::A()
{
    A::s_member.insert(5); // It causes error.
}

我得到这个错误:

/tmp/ccBmNUGs.o: In function `A::A()': a.cpp:(.text+0x15): undefined
 reference to `A::s_member' collect2: error: ld returned 1 exit status

您已经声明了A::s_member,但尚未定义它。要定义它,请在类外放入以下代码:

std::set<int> A::s_member;

例如:

std::set<int> A::s_member;
A::A()
{
  // ...
}

该问题与访问和private/public无关。

您必须定义变量

#include "a.h"
std::set<int> A::s_member;
A::A()
{
    A::s_member.insert(5); // It causes error.
}

错误消息中对对象文件ccBmNUGs.o的引用表明这是链接器的错误。链接器找不到s_member 的定义