c++ - 在 .cpp 文件中定义静态类成员时出现未定义的引用错误
问题描述
这个问题可能与其他“访问静态类成员时未定义的引用错误”问题类似。我已经探索过它们,我的理解是我需要在源文件中单独定义静态类成员,以便为保存数据的静态类成员创建一个对象。
我的问题是我遵循定义规则但仍然得到未定义的参考错误。
可以使用以下代码重现问题:
主文件
#include <iostream>
#include "src/a.hpp"
int main() {
std::cout << a::x;
return 0;
}
src/a.hpp
class a {
public:
static int x;
};
src/a.cpp
#include "a.hpp"
int a::x = 20;
我main.cpp
使用g++ main.cpp -o main
. 我有一个test
目录,它有main.cpp
一个子目录src
,src
包含a.hpp
和a.cpp
。
如果我在头文件中定义静态变量,该错误就会解决,但其他帖子建议它应该导致链接器错误。
解决方案
问题出在我使用的编译命令中,g++ main.cpp -o main
无法编译 src/a.cpp。编译它,g++ main.cpp src/a.cpp -o main
它工作正常。