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



在具有两种实例化类型(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...
};

您是否在类定义之前包含<vector><utility>

您需要"包含您使用的内容"以避免交叉编译问题。

不能保证<utility>std::pair 需要)或<vector>包含在任何其他标准标头中。如评论中所述。

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

最新更新