【发布时间】:2021-02-14 13:07:44
【问题描述】:
此问题可能与其他“访问静态类成员时出现未定义的引用错误”问题类似。我对它们进行了探索,我的理解是我需要在源文件中单独定义静态类成员,以便为保存数据的静态类成员创建一个对象。
我的问题是我遵循定义规则但仍然得到未定义的引用错误。
可以使用此代码重现问题:
main.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;
我使用g++ main.cpp -o main 编译main.cpp。我有一个test 目录,其中包含main.cpp 和一个子目录src,src 包含a.hpp 和a.cpp。
如果我在头文件中定义静态变量,错误就会解决,但其他帖子建议它应该导致链接器错误。
【问题讨论】:
-
看来您实际上并未编译或链接到
a.cpp。在头文件中定义变量是可行的,因为您只在单个源文件中包含该头文件。本质上,您将int a::x = 20;移动到main.cpp -
@IgorTandetnik 这是我的第一个 c++ 项目,我使用的是文本编辑器(vscode),我想我编译不正确。编译这个的正确方法是什么,你能指定吗
-
g++ main.cpp src/a.cpp -o main应该这样做,我认为。 -
是的,它有效,谢谢。有没有一种简洁的方法可以做到这一点,因为一个项目中可以有多个源文件在不同的目录中?
标签: c++ static undefined-reference