模板化typedef中“type”之前的预期init-declarator

时间:2013-03-06 19:06:16

标签: c++ templates typedef

我正在尝试编译下面的代码。

template <class T1, class T2>
class class1
{
typedef T1 Type1;
typedef T2 Type2;
//void class1Method();
};


template <class T1>
class class2
{
typedef T1 Type1;
void class2Method();
};

template <class T1>
void class2<T1>::class2Method()
{
 typedef class1<T1,T1>::Type1 Type3;
}

但是,我收到如下所示的错误。

g++ -g -c class12.h -o class12.o
class12.h: In member function `void class2<T1>::class2Method()':
class12.h:20: error: expected init-declarator before "Type3"
class12.h:20: error: expected `,' or `;' before "Type3"
make: *** [class12.o] Error 1

我做错了什么?

有人可以告诉我吗?

由于

2 个答案:

答案 0 :(得分:4)

您需要typename

typedef typename class1<T1,T1>::Type1 Type3;

此外,您需要在class1公开。

中设置typedef
template <class T1, class T2>
class class1
{
 public:
  typedef T1 Type1;
  typedef T2 Type2;
};

答案 1 :(得分:1)

尝试使用typename

typedef typename class1<T1,T1>::Type1 Type3;