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;

さらに、typedefをclass1公開する必要があります。

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 に答える