编译器错误:typedef之前的预期嵌套名称说明符

时间:2016-02-24 12:40:21

标签: c++ c++11 iterator c++98 typename

在具有两种实例化类型(TPT)的模板类中,我目前使用以下行来为该类使用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...

};

1 个答案:

答案 0 :(得分:1)

您是否在课程定义之前加入了<utility><utility>

您需要"include what you use"以避免交叉编译问题。

无法保证std::pair({1}}所需)或<vector>包含在任何其他标准标头中。 正如评论中所述。

因此,用于C ++ 98构建的编译器可能需要它才能正确编译。