我正在尝试编译下面的代码。
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
我做错了什么?
有人可以告诉我吗?
由于
答案 0 :(得分:4)
您需要typename
typedef typename class1<T1,T1>::Type1 Type3;
此外,您需要在class1
公开。
template <class T1, class T2>
class class1
{
public:
typedef T1 Type1;
typedef T2 Type2;
};
答案 1 :(得分:1)
尝试使用typename
:
typedef typename class1<T1,T1>::Type1 Type3;