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

為什麼我無法使用 GCC 存取模板函數中的基類成員?

Susan Sarandon
發布: 2024-11-01 15:50:02
原創
940 人瀏覽過

Why Can't I Access Base Class Members in a Template Function with GCC?

在範本中使用基底類別成員

提供的程式碼無法使用 GCC 進行編譯,但可以使用 Visual Studio 進行編譯。當嘗試在 bar 函數中存取基底類別的 foo 成員時,GCC 遇到錯誤,聲稱 foo 未在目前範圍內宣告。

根據官方 C 規範,GCC 遵循某些規則:如果基類是模板類,則阻止編譯器推斷基類的成員。這是因為,如果不直接了解基類的定義,編譯器無法確定其成員。

要解決此問題,有兩個選項:

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

這使GCC 能夠將foo 成員識別為屬於基類A.

因此,在模板類中訪問基類別成員的正確語法是this->foo 或A::foo.

以上是為什麼我無法使用 GCC 存取模板函數中的基類成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!