【问题标题】:gcc template inherit problemgcc模板继承问题
【发布时间】:2011-01-28 23:33:29
【问题描述】:
template<class T>
class TBase
{
public:
 typedef int Int;

 struct TItem
 {
  T Data;
 };

 int value;
};

template<class T>
class TClass:public TBase<T>
{
public:
 TBase<T>::TItem item; // error here. only when using type defined in base class.

 void func()
 {
  TBase<T>::value ++; // no error here!
 }
};

int main(int argc, char *argv[])
{
 TClass<int> obj;
 return 0;
}

在 VC 和 Borland C++ 编译器中,它们都可以编译它。但是 gcc 无法编译它,因为它使用两次来处理模板的事情。 VC 或 BCB 不关心未知的模板名称。有没有办法抑制 gcc 的这个功能?谢谢!

【问题讨论】:

  • 为什么不使用this-&gt; 来实现功能。另一个应该是struct TBase&lt;T&gt;::TItem

标签: templates gcc g++ inheritance


【解决方案1】:

试试看:

typename TBase<T>::TItem item;

此链接提供解释:http://pages.cs.wisc.edu/~driscoll/typename.html

【讨论】:

    【解决方案2】:

    TItem 是一种类型,因此您需要 typename 关键字。值是一个字段。编译器正确解析值,但需要告知 TItem 实际上是一个类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多