理解静态对象字段赋值的“未解析的外部符号”错误
在编写代码时,您可能会遇到需要赋值的情况来自不同类的静态对象字段的值。但是,尝试此类分配可能会导致链接错误,并显示消息“无法解析的外部符号”。
考虑一个简化的代码示例:
<code class="cpp">class A { public: A() {} }; class B { public: static A* a; }; int main() { B::a = new A; }</code>
尝试编译此代码将导致错误:
error LNK2001: unresolved external symbol "public: static class A * B::a" (?a@B@@2PAVA@@A)
发生此错误是因为静态对象字段未在其类声明中隐式定义。根据 C 参考标准,“类定义中静态数据成员的声明不是定义,并且可能是不完整的类型。”
静态对象字段定义规则
要解决此错误,您必须在类定义之外显式定义静态对象字段。此规则适用于所有静态对象字段,无论其可访问性或可变性如何。
示例定义:
<code class="cpp">A* B::a = nullptr;</code>
将定义放置在封闭的命名空间范围中可确保链接器在尝试解析 main() 中的赋值时可以找到该符号。
以上是如何解决分配给静态对象字段时出现的'无法解析的外部符号”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!