首頁  >  文章  >  後端開發  >  為什麼在 C 中設定靜態欄位時會出現「無法解析的外部符號」?

為什麼在 C 中設定靜態欄位時會出現「無法解析的外部符號」?

DDD
DDD原創
2024-10-31 13:45:02827瀏覽

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>

此變更可確保靜態欄位正確定義並且可以在 main 方法中使用。透過遵循單一定義規則,您可以防止「無法解析的外部符號」錯誤,並確保您的靜態欄位正確連結。

以上是為什麼在 C 中設定靜態欄位時會出現「無法解析的外部符號」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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