如何通过类构造函数访问私有静态成员变量
How I can access a private static member variable via the class constructor?
如何从构造函数或通常从其他成员函数使用和修改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
的定义
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- C++ 静态成员变量 - 文件之间的访问
- 如何在运行时使用静态成员函数初始化静态成员变量
- 模板类中嵌套类的C 静态成员变量
- 如何检查静态成员变量模板?
- 重载运算符和静态成员变量的行为
- 类的静态成员变量(受保护)的作用域
- gcc 和 clang 中 constexpr 静态成员变量的链接器错误
- dll 中静态成员变量的生存期