我想提供一些对象的一次性配置。
此代码:
class Foo
{
public:
static struct Bar {
bool a = true;
int b = 69;
} bar;
};
int main(int argc, char **argv)
{
Foo::bar.a = false;
}
编译得很好:
$ g++ -c -std=gnu++11 main.cpp
但链接器抱怨缺少符号:
$ g++ main.o
Undefined symbols for architecture x86_64:
"Foo::bar", 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)
为什么这不起作用?
和
实现同样目标的更好方法是什么?
答案 0 :(得分:6)
变量仅在类定义中声明 ,因此您需要此静态变量的(单个)定义,与任何其他静态变量一样:
Foo::Bar Foo::bar;
Live demo。请记住,您的整个二进制文件中只能存在其中一个定义(无论是库还是可执行文件),因此该定义不能位于可以包含在多个翻译单元(即源文件)中的标题中