gcc模板继承问题

时间:2011-01-28 23:33:30

标签: templates gcc g++ inheritance

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的这个功能?谢谢!

2 个答案:

答案 0 :(得分:4)

尝试使用:

typename TBase<T>::TItem item;

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

答案 1 :(得分:0)

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