静态对象字段的无法解析的外部符号
本文调查了尝试设置时遇到的错误消息“error LNK2001:无法解析的外部符号”主方法中的类中的静态字段。
在提供的代码片段中,类中静态字段“a”的声明“B”出现在类定义本身内。但是,根据 C 标准,此类声明不被视为定义。对于静态数据成员,正确的定义必须出现在封闭命名空间范围内的类外部,使用“::”运算符。
管理这一要求的规则称为单一定义规则 (ODR),它要求每个实体(包括静态数据成员)在整个程序中都有一个唯一的定义。该规则确保静态成员的值不存在歧义。
因此,要解决该错误,应将代码修改如下,其中“a”是在命名空间范围中定义的:
class A
{
public:
A()
{
}
};
class B
{
public:
static A* a;
};
A* B::a; // Definition in namespace scope
int main()
{
B::a = new A;
}
通过在类外部显式定义静态成员,链接器可以正确解析符号引用,代码将成功编译。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3