静的オブジェクト フィールド割り当ての「未解決の外部シンボル」エラーについて
コードを作成するときに、値を別のクラスの静的オブジェクト フィールドに追加します。ただし、このような割り当てを試行すると、「未解決の外部シンボル」というメッセージが表示されるリンク エラーが発生する可能性があります。
簡略化したコード例を考えてみましょう。
<code class="cpp">class A { public: A() {} }; class B { public: static A* a; }; int main() { B::a = new A; }</code>
このコードをコンパイルしようとすると、次の結果が得られます。エラー:
error LNK2001: unresolved external symbol "public: static class A * B::a" (?a@B@@2PAVA@@A)
このエラーは、静的オブジェクト フィールドがクラス宣言で暗黙的に定義されていないために発生します。 C 参照標準によれば、「クラス定義内の静的データ メンバーの宣言は定義ではなく、不完全な型である可能性があります。」
静的オブジェクト フィールドの定義の規則
このエラーを解決するには、クラス定義の外で静的オブジェクト フィールドを明示的に定義する必要があります。このルールは、アクセシビリティや変更可能性に関係なく、すべての静的オブジェクト フィールドに適用されます。
定義例:
<code class="cpp">A* B::a = nullptr;</code>
定義を囲む名前空間スコープに配置すると、次のことが保証されます。リンカは、main() で割り当てを解決しようとするときにシンボルを見つけることができます。
以上が静的オブジェクト フィールドに割り当てるときに発生する「未解決の外部シンボル」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。