建構子呼叫錯誤:理解「非類別型別中的成員請求」
使用特定建構子參數實例化物件時,程式員可能會遇到錯誤「請求'..'中的非類別類型的成員'..'。」理解此錯誤的根源對於有效解決該錯誤至關重要。
提供的程式碼範例示範了這個問題。 Foo 類別有兩個建構子:一個不帶參數的預設建構子和一個接受單一整數參數的建構子。依預期使用參數化建構函數實例化 foo1。但是,呼叫預設構造函數會導致編譯錯誤。
為什麼會出現這種情況?語法
Foo foo2();
將自身誤解為函數宣告。編譯器將其視為宣告了一個名為 foo2 且傳回類型為 Foo 的函數,需要基於括號的參數。但是,其目的是使用預設建構函數實例化名為 foo2 的對象,該構造函數不帶任何參數。
因此,編譯器將 foo2 指定為名為 Foo() 的非類別型別。此指定會阻止存取 Foo 類別中定義的方法,從而導致 foo2.bar() 的呼叫無效。
要修正此錯誤,語法應調整為:
Foo foo2;
省略括號,編譯器使用預設值將
Foo foo2
解釋為foo2 的物件聲明構造函數。這將成功實例化 Foo 類型的對象,允許存取其成員函數,包括 bar()。
以上是為什麼'Foo foo2();”導致'請求非類別類型成員”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!