Reputation: 1241
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
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