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