首頁 >後端開發 >C++ >如何解決分配給靜態物件欄位時出現的「無法解析的外部符號」錯誤?

如何解決分配給靜態物件欄位時出現的「無法解析的外部符號」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-10-31 16:03:18803瀏覽

How Do I Resolve the

理解靜態物件欄位賦值的「未解析的外部符號」錯誤

在編寫程式碼時,您可能會遇到需要賦值的情況來自不同類別的靜態物件欄位的值。但是,嘗試此類分配可能會導致連結錯誤,並顯示訊息「無法解析的外部符號」。

考慮一個簡化的程式碼範例:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn