c++ - 在头文件之外实现静态方法时未定义的引用
问题描述
我有一个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::
相同的错误。
任何想法我做错了什么以及如何正确实施该方法?
解决方案
推荐阅读
- vba - 删除 Power Point 幻灯片中的现有图表并使用 VBA 替换为新图表
- django - 为 django 应用程序添加安全标头的最佳做法是什么?
- c# - 无法使用淘汰组件呈现部分 html
- visual-studio - 应用程序链接到 msvcp140d 而不是 msvcp140
- c# - 在循环中运行 CheckZipPassword() 时出现“状态错误(无效的距离代码)”
- azure - 在 Azure VM 中从 Azure 容器注册表运行容器
- swift - 如何在此用例中对表格视图单元格进行排序
- javascript - 添加反应以嵌入订单
- python - Cython:避免在每个扩展上编译所有 C/C++ 文件。目标:在 PyPi 中分发
- angular - 在 Angular 中打印 *ngFor 内的对象项