嵌套模板化类的Typedef

Typedef for nested templated class

本文关键字:Typedef 嵌套      更新时间:2023-10-16

在.hpp文件中,我有

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

在.cpp文件中我有

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

编译器在InnerMap::iterator iter;中给出语法错误,声称iter之前应使用分号。如果我删除了template <SomeEnum E>部分,编译器会很高兴。我忘记了什么?我该如何让它发挥作用?

查看相关名称。

要解决您的问题,您需要使用typename:

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