重載建構子和類別成員存取錯誤
考慮一個具有兩個建構子的類,一個沒有參數,另一個有一個整數參數。當按預期使用後一個建構函數建立物件時,使用無參構造函數會導致錯誤。
例如,編譯以下程式碼片段:
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中文網其他相關文章!