1

I am trying to complie the code below.

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;
}

However, I get the error shown below.

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

What am I doing wrong?

Can somebody please let me know?

Thanks

geraldCelente
  • 955
  • 2
  • 13
  • 35

2 Answers2

4

You need a typename

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

Furthermore, you need to make the typedef in class1 public.

template <class T1, class T2>
class class1
{
 public:
  typedef T1 Type1;
  typedef T2 Type2;
};
juanchopanza
  • 210,243
  • 27
  • 363
  • 452
1

Try using typename:

typedef typename class1<T1,T1>::Type1 Type3;
Nik Bougalis
  • 10,222
  • 1
  • 19
  • 37