首页 > 解决方案 > 在头文件之外实现静态方法时未定义的引用

问题描述

我有一个A具有静态实例成员的类A* a
我正在尝试创建一个initA()启动a.
但是,如果我在cpp文件而不是头文件中实现该方法,则会收到未定义的引用错误:

头文件的代码:

class A
{
public:
  static A *a;
  static void initA ();
};

cpp文件的代码:

#include "A.h"
void A::initA(){
    A::a = new A();
}

编译此代码会产生以下错误(从在线 IDE 复制。我的 VS 产生不同的错误但其含义相同):

/var/tmp/ccW1EJl7.o: In function `A::initA()':
A.cpp:(.text+0x11): undefined reference to `A::a'
collect2: error: ld returned 1 exit status

请注意,用(省略 )替换该行A::a = new A();a = new A();产生A::相同的错误。

任何想法我做错了什么以及如何正确实施该方法?

标签: c++

解决方案


推荐阅读