静态对象字段的无法解析的外部符号
本文调查了尝试设置时遇到的错误消息“错误 LNK2001:无法解析的外部符号”主方法中的类中的静态字段。
在提供的代码片段中,类“B”中的静态字段“a”的声明发生在类定义本身内。但是,根据 C 标准,此类声明不被视为定义。对于静态数据成员,正确的定义必须出现在封闭命名空间范围内的类外部,使用“::”运算符。
管理这一要求的规则称为单一定义规则 (ODR),它要求每个实体(包括静态数据成员)在整个程序中都有一个唯一的定义。该规则确保静态成员的值不会出现歧义。
因此,要解决该错误,应按如下方式修改代码,其中“a”是在命名空间范围中定义的:
<code class="cpp">class A { public: A() { } }; class B { public: static A* a; }; A* B::a; // Definition in namespace scope int main() { B::a = new A; }</code>
通过在类外部显式定义静态成员,链接器可以正确解析符号引用,代码将成功编译。
以上是为什么在 C 中设置静态字段时出现“无法解析的外部符号”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!