未解析的外部符號:了解靜態欄位宣告
嘗試將一個類別中的靜態欄位設定為與主類別中不同的值時方法,您可能會遇到錯誤「無法解析的外部符號」(錯誤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>
此變更可確保靜態欄位正確定義並且可以在 main 方法中使用。透過遵循單一定義規則,您可以防止「無法解析的外部符號」錯誤,並確保您的靜態欄位正確連結。
以上是為什麼在 C 中設定靜態欄位時會出現「無法解析的外部符號」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!