C++ 访问静态原子数据成员会导致链接器错误

C++ 访问静态原子数据成员会导致链接器错误,c++,static,linker-errors,atomic,C++,Static,Linker Errors,Atomic,如何访问静态原子变量而不导致链接器错误 我已将代码示例缩减为以下内容: #include <iostream> #include <atomic> class MyClass { public: static std::atomic_bool onOrOff; }; std::atomic_bool onOrOff(false); int main(int argc, const char * argv[]) { std::cout <<

如何访问静态原子变量而不导致链接器错误

我已将代码示例缩减为以下内容:

#include <iostream>
#include <atomic>

class MyClass
{
public:
    static std::atomic_bool onOrOff;
};

std::atomic_bool onOrOff(false);

int main(int argc, const char * argv[]) {
    std::cout << "It is: " << (MyClass::onOrOff? "on": "off") << "\n";
    return 0;
}
注意:如果删除main()中的行,则不会出现生成错误
MyClass::onorof
,因此我认为这排除了编译器选项的问题。

这:

std::atomic_bool onOrOff(false);
应该是:

std::atomic_bool MyClass::onOrOff(false);
目前,您已经声明了两个不同的
onorof
变量,一个在类内部,一个在类外部。并且仅为一个配置了存储。

此:

std::atomic_bool onOrOff(false);
应该是:

std::atomic_bool MyClass::onOrOff(false);

目前,您已经声明了两个不同的
onorof
变量,一个在类内部,一个在类外部。并且只为一个类分配了存储。

您忘记了
onorof
MyClass
的作用域名称。你需要

std::atomic_bool MyClass::onOrOff(false);

您忘记了
onorof
MyClass
的作用域名称。你需要

std::atomic_bool MyClass::onOrOff(false);

太棒了,谢谢。我会给自己一个D'oh!当日奖项:-)太棒了,谢谢。我会给自己一个D'oh!当日奖项:-)