c++ - 在类内引用静态变量时未定义的符号
问题描述
以下代码无法编译,我不太确定我理解为什么:
class A {
public:
virtual ~A() {}
};
class B : public A {
public:
virtual ~B() {}
static B* I() { return &i_; }
protected:
static B i_;
explicit B() {}
};
int main() {
A* a = B::I();
(void)a;
return 0;
}
Undefined symbols for architecture x86_64:
"B::i_", referenced from:
B::I() 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)
I() 方法应该可以访问该符号,但事实并非如此。
Apple LLVM 版本 9.1.0 (clang-902.0.39.2)
解决方案
将此添加到 .cpp 的全局范围以定义i_
静态成员:
B B::i_;
推荐阅读
- blockchain - 无需gasprice即可与智能合约交互
- python - 如何在用于 Ansible 动态清单的 python 字典中为值添加前缀?
- service - 在 kubernetes 命名空间中监视 prometheus 上的自定义服务的问题
- c++ - 如何查看io_service中的任务是否完成?
- vue.js - 获取 vue typeerror 无法读取未定义的属性“名称”
- c - 为什么我必须重新声明一个外部函数?
- rxjs - 如何根据返回的数据类型将 ASP.Net Core api 返回值路由到适当的 observable
- spring-boot - 如何为多个 feign 客户端实现错误解码器
- arrays - 如何正确地将某些内容附加到数组中?
- django - 如何修复'AttributeError:'Person'对象在Django is_valid()方法中没有属性'_default_manager'