首頁 >後端開發 >C++ >為什麼我的無參構造函數會導致「請求成員」錯誤?

為什麼我的無參構造函數會導致「請求成員」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-08 21:26:11507瀏覽

Why Does My No-Argument Constructor Cause a

重載建構子和類別成員存取錯誤

考慮一個具有兩個建構子的類,一個沒有參數,另一個有一個整數參數。當按預期使用後一個建構函數建立物件時,使用無參構造函數會導致錯誤。

例如,編譯以下程式碼片段:

class Foo
{
public:
    Foo() {};
    Foo(int a) {};
    void bar() {};
};

int main()
{
    // This works...
    Foo foo1(1);
    foo1.bar();

    // This fails...
    Foo foo2();
    foo2.bar();

    return 0;
}

會產生以下錯誤:

error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'

出現這個錯誤是因為編譯器解釋了程式碼Foo foo2() ;作為名稱為“foo2”且傳回類型為“Foo”的函數宣告。但是,您打算使用無參數建構函式實例化「Foo」類型的物件。

要解決此問題,請修改 Foo foo2();到 Foo foo2;。此變更通知編譯器您要使用預設建構函式建立物件。

或者,由於同時存在無參數和單參數建構函數,您可能會遇到指示重載建構函數中存在歧義的錯誤。在這種情況下,使用 Foo foo2{}; 明確呼叫無參構造函數;將解決歧義。

以上是為什麼我的無參構造函數會導致「請求成員」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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