在具有两种实例化类型(T
和PT
)的模板类中,我目前使用以下行来为该类使用const_iterator
:
typedef typename std::vector< std::pair<T, PT> >::const_iterator const_iterator;
这适用于C ++ 11/14环境但是在C ++ 98环境中进行编译时(遗憾的是,出于各种原因可能需要这样做)我得到了标题expected nested name specifier before typedef
中显示的错误
有什么方法可以解决旧编译器的这个问题吗?
编辑:这是我班级的基本结构,
template<typename T, typename PT> class MyClass {
private:
std::vector< std::pair<T,PT> > dataWithPriorityVec;
//... various private methods...
public:
typedef typename std::vector< std::pair<T,PT> >::const_iterator const_iterator;
//... constructors and various public methods...
};
答案 0 :(得分:1)
您是否在课程定义之前加入了<utility>
和<utility>
?
您需要"include what you use"以避免交叉编译问题。
无法保证std::pair
({1}}所需)或<vector>
包含在任何其他标准标头中。 正如评论中所述。
因此,用于C ++ 98构建的编译器可能需要它才能正确编译。