首頁 > 後端開發 > C++ > 主體

為什麼 GCC 無法辨識模板類別中的基底類別成員?

Barbara Streisand
發布: 2024-11-02 17:12:02
原創
499 人瀏覽過

Why Does GCC Fail to Recognize Base Class Members in Template Classes?

GCC 編譯問題:模板類別中基類成員的可訪問性

編譯模板類層次結構時,GCC 有時會遇到不出現的錯誤在其他編譯器。當嘗試存取依賴於模板參數的基類成員時,就會出現這樣的錯誤。

考慮以下程式碼片段:

<code class="cpp">template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A<T> {
public:
    void bar() { cout << foo << endl; } // Error in GCC
};
登入後複製

使用GCC 編譯此程式碼會產生錯誤:

error: ‘foo’ was not declared in this scope
登入後複製

儘管foo 成員在基底類別中邏輯上存在,但如果沒有明確指定基底類別或使用this 指針,GCC 無法辨識它。這種差異源自於 C 規範的早期版本,該規範允許透過解析來推斷基類成員。然而,隨後對規範的更新澄清了這種推論可能會導致衝突。

要解決此問題,有兩種建議的方法:

  1. 使用this 指標存取基底類別成員:
<code class="cpp">void bar() { cout << this->foo << endl; }</code>
登入後複製
  1. 在成員訪問中明確引用基類:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>
登入後複製

此行為記錄在GCC 手冊中,其中提供有關解決類似問題的更多資訊。透過使用這些技術,開發人員可以確保成功編譯具有成員依賴項的模板類別層次結構。

以上是為什麼 GCC 無法辨識模板類別中的基底類別成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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