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 規範的早期版本,該規範允許透過解析來推斷基類成員。然而,隨後對規範的更新澄清了這種推論可能會導致衝突。
要解決此問題,有兩種建議的方法:
<code class="cpp">void bar() { cout << this->foo << endl; }</code>
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>
此行為記錄在GCC 手冊中,其中提供有關解決類似問題的更多資訊。透過使用這些技術,開發人員可以確保成功編譯具有成員依賴項的模板類別層次結構。
以上是為什麼 GCC 無法辨識模板類別中的基底類別成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!