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

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

DDD
DDDオリジナル
2024-10-31 13:45:02828ブラウズ

Why Does

未解決の外部シンボル: 静的フィールド宣言について

あるクラスの静的フィールドをメインクラス内から異なる値に設定しようとしたときこの方法を実行すると、「未解決の外部シンボル」エラー (エラー LNK2001: 未解決の外部シンボル) が発生する場合があります。これは通常、静的フィールドがクラス定義の外部で適切に初期化されていない場合に発生します。

C リファレンスによると、クラス定義内の静的データ メンバーの宣言は、定義ではなく宣言とみなされます。静的フィールドを定義するには、クラス定義の外側、クラス定義を囲む名前空間スコープで宣言する必要があります。

たとえば、次のコードを考えてみましょう。

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
    static A* a;  // Declaration only
};

int main()
{
    B::a = new A;  // Error
}</code>

この場合、静的フィールド B::a はクラス定義内で宣言されていますが、定義されていません。このエラーを解決するには、次に示すように、静的フィールドの定義をクラス定義の外に移動する必要があります。

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
};

// Static field definition outside the class
A* B::a = nullptr;

int main()
{
    B::a = new A;  // No error
}</code>

この変更により、静的フィールドが適切に定義され、メイン メソッド内で使用できるようになります。 。 1 つの定義ルールに従うことで、「未解決の外部シンボル」エラーを防ぎ、静的フィールドが正しくリンクされていることを確認できます。

以上がC で静的フィールドを設定すると「未解決の外部シンボル」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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