如何使用和修改构造函数中的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
答案 0 :(得分:3)
您已声明A::s_member
但尚未定义。要定义它,请在类之外放置以下代码:
std::set<int> A::s_member;
例如:
std::set<int> A::s_member;
A::A()
{
// ...
}
该问题与访问和private
/ public
无关。
答案 1 :(得分:0)
您必须定义变量
#include "a.h"
std::set<int> A::s_member;
A::A()
{
A::s_member.insert(5); // It causes error.
}
错误消息中对目标文件ccBmNUGs.o
的引用表明它是链接器的错误。
链接器找不到s_member