理解靜態物件欄位賦值的「未解析的外部符號」錯誤
在編寫程式碼時,您可能會遇到需要賦值的情況來自不同類別的靜態物件欄位的值。但是,嘗試此類分配可能會導致連結錯誤,並顯示訊息「無法解析的外部符號」。
考慮一個簡化的程式碼範例:
<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中文網其他相關文章!