首页  >  文章  >  后端开发  >  为什么在 C 中设置静态字段时出现“无法解析的外部符号”错误?

为什么在 C 中设置静态字段时出现“无法解析的外部符号”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-01 01:35:28117浏览

Why Am I Getting

静态对象字段的无法解析的外部符号

本文调查了尝试设置时遇到的错误消息“错误 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn