1

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

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

我究竟做错了什么?

有人可以告诉我吗?

谢谢

4

2 回答 2

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;
};
于 2013-03-06T19:08:19.880 回答
1

尝试使用typename

typedef typename class1<T1,T1>::Type1 Type3;
于 2013-03-06T19:08:55.963 回答