«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я получаю ошибку «Неразрешенный внешний символ» при установке статического поля в C++?

Почему я получаю ошибку «Неразрешенный внешний символ» при установке статического поля в C++?

Опубликовано 9 ноября 2024 г.
Просматривать:344

Why Am I Getting \

Неразрешенный внешний символ для поля статического объекта

В этой статье исследуется сообщение об ошибке «ошибка 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