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中文网其他相关文章!