(C++) My Questions: Expected init-declarator compiler-error with G++

August 7, 2019 · View on GitHub

 

 

 

 

 

(C++) My Questions: Expected init-declarator compiler-error with G++

 

Posted on 4 Aug 2009 at 6:00 AM

 


Dear fellow programmers, I fail to get a typedef in a template class to compile, when using G++ 3.4.4 (compiled with 'g++ UnitMyClass.cpp'). But when I use C++ Builder 6's compiler (BCC32) it compiles successfully. Below are the simplified code and error messages. Note that I already try to tackle the problem with four different syntaxes. Google didn't give me the answer, I hope you will. Thanks in advance, Bilderbikkel

 


//UnitMyClass.cpp #include "UnitMyClass.h" //UnitMyClass.h #include <map> template <class T> struct MyClass {   typedef T value_type;   void MyMethod_1() const   {     typedef std::map<T,double>::const_iterator Iter;   }   void MyMethod_2() const   {     typedef std::map<value_type,double>::const_iterator Iter;   }   void MyMethod_3(const T& t) const   {     typedef std::map<T,double>::const_iterator Iter;   }   void MyMethod_4(const T& t) const   {     typedef std::map<value_type,double>::const_iterator Iter;   } };

 

The errors (for each version of MyMethod) are:

 


$ g++ UnitStorage.cpp In file included from UnitStorage.cpp:5: UnitStorage.h: In member function 'void MyClass<T>::MyMethod_1() const': UnitStorage.h:15: error: expected init-declarator before "Iter" UnitStorage.h:15: error: expected ',' or ';' before "Iter"

 

 

 

 

 

Answer by Lundin

 


Surprisingly I actually knew that one! It's because of GCC being strict with the standard and Borland ain't. You gotta write typedef typename std::map<T,double>::const_iterator Iter; However, I don't enough of the C++ standard to explain the details of that.

 

Thanks Lundin!