ホームページ  >  記事  >  バックエンド開発  >  C で静的フィールドを設定すると「未解決の外部シンボル」エラーが発生するのはなぜですか?

C で静的フィールドを設定すると「未解決の外部シンボル」エラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 01:35:28114ブラウズ

Why Am I Getting

静的オブジェクト フィールドの未解決の外部シンボル

この記事では、設定しようとしたときに発生するエラー メッセージ「エラー LNK2001: 未解決の外部シンボル」について調査します。メイン メソッドからのクラスの静的フィールド。

提供されたコード スニペットでは、クラス "B" の静的フィールド "a" の宣言がクラス定義自体の中で発生します。ただし、C 標準によれば、そのような宣言は定義とみなされません。静的データ メンバーの場合、適切な定義は、「::」演算子を使用して、それを囲む名前空間スコープ内のクラスの外側に現れる必要があります。

この要件を管理するルールは、One Definition Rule (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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。