Muxecoid
Muxecoid

Reputation: 1241

Typedef for nested templated class

In .hpp file I have

template <SomeEnum E>
class SomeClass {
   //many definitions
   class InnerClass {
       //Some stuff
   };
   typedef std::map<std::string, InnerClass> InnerMapType;
};

in .cpp files I have

template <SomeEnum E>
SomeClass<E>::~SomeClass() {
   InnerMapType::iterator iter;
   //Iterate over resources
}

Compiler gives syntax error in InnerMap::iterator iter; claiming semicolon is expected before iter. If I remove the template <SomeEnum E> part compiler is happy. What did I forget and how do I make it work?

Upvotes: 1

Views: 840

Answers (1)

BЈовић
BЈовић

Reputation: 64223

Take a look into dependent names.

To solve your issue, you need to use typename :

template <SomeEnum E>
SomeClass<E>::~SomeClass() {
   typename InnerMapType::iterator iter;
   //Iterate over resources
}

Upvotes: 3

Related Questions