首頁 > 後端開發 > C++ > 為什麼'Foo foo2();”導致'請求非類別類型成員”錯誤?

為什麼'Foo foo2();”導致'請求非類別類型成員”錯誤?

Barbara Streisand
發布: 2024-12-01 01:22:11
原創
472 人瀏覽過

Why Does

建構子呼叫錯誤:理解「非類別型別中的成員請求」

使用特定建構子參數實例化物件時,程式員可能會遇到錯誤「請求'..'中的非類別類型的成員'..'。」理解此錯誤的根源對於有效解決該錯誤至關重要。

提供的程式碼範例示範了這個問題。 Foo 類別有兩個建構子:一個不帶參數的預設建構子和一個接受單一整數參數的建構子。依預期使用參數化建構函數實例化 foo1。但是,呼叫預設構造函數會導致編譯錯誤。

為什麼會出現這種情況?語法

Foo foo2();
登入後複製

將自身誤解為函數宣告。編譯器將其視為宣告了一個名為 foo2 且傳回類型為 Foo 的函數,需要基於括號的參數。但是,其目的是使用預設建構函數實例化名為 foo2 的對象,該構造函數不帶任何參數。

因此,編譯器將 foo2 指定為名為 Foo() 的非類別型別。此指定會阻止存取 Foo 類別中定義的方法,從而導致 foo2.bar() 的呼叫無效。

要修正此錯誤,語法應調整為:

Foo foo2;
登入後複製

省略括號,編譯器使用預設值將

Foo foo2
登入後複製

解釋為foo2 的物件聲明構造函數。這將成功實例化 Foo 類型的對象,允許存取其成員函數,包括 bar()。

以上是為什麼'Foo foo2();”導致'請求非類別類型成員”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板