定义私有静态类成员

mnn*_*mnn 2 c++ static class member

class B { /* ... */ };

class A {
public:
    A() { obj = NULL; }
private:
    static B* obj;
};
Run Code Online (Sandbox Code Playgroud)

然而,这会产生大量的链接器错误,符号obj未解析.

没有这些链接器错误的私有静态类成员的"正确"方法是什么?

BЈо*_*вић 6

你需要这样定义:

这是在标题中:

class B { ... }

class A {
public:
    A() { obj = NULL; }
private:
    static B* obj;
}
Run Code Online (Sandbox Code Playgroud)

这是源头

B* A::obj = NULL;
Run Code Online (Sandbox Code Playgroud)

  • 很可能他不需要`A(){obj = NULL; 那么 (7认同)
  • @ 7vies:不包括A构造函数会改变代码的含义.目前,构建新的A对象会重置静态成员obj(这可能很重要). (2认同)

vil*_*pam 6

你需要添加

B *A::obj = NULL;
Run Code Online (Sandbox Code Playgroud)

你的一个cpp文件.另请注意,如果在A的构造函数中设置obj,则意味着无论何时创建A对象,都会再次重置obj - 因为它是静态的,所以只有一个obj在所有A实例之间共享.