首页 > 解决方案 > 在 .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一个子目录srcsrc包含a.hppa.cpp

如果我在头文件中定义静态变量,该错误就会解决,但其他帖子建议它应该导致链接器错误。

标签: c++staticundefined-reference

解决方案


问题出在我使用的编译命令中,g++ main.cpp -o main无法编译 src/a.cpp。编译它,g++ main.cpp src/a.cpp -o main它工作正常。


推荐阅读