如何在不导致链接器错误的情况下访问静态原子变量?
我将代码示例简化为以下示例:
#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;
}
这将导致以下链接器错误(MaxOS X 10.11,XCode 7.2):
Undefined symbols for architecture x86_64:
"MyClass::onOrOff", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
注意:如果我删除main()访问中的行,则没有构建错误
MyClass::onOrOff
,所以我认为这可以排除编译器选项的问题。 最佳答案
这个:
std::atomic_bool onOrOff(false);
应该:
std::atomic_bool MyClass::onOrOff(false);
就目前而言,您已经声明了两个不同的
onOrOff
变量,一个在类内部,一个在外部。而且只能分配一个存储空间。