首頁  >  文章  >  後端開發  >  為什麼我無法使用 GCC 存取模板函數中的基類成員?

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

Susan Sarandon
Susan Sarandon原創
2024-11-01 15:50:02941瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn