在具有两种实例化类型(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...
};
您是否在类定义之前包含<vector>
和<utility>
?
您需要"包含您使用的内容"以避免交叉编译问题。
不能保证<utility>
(std::pair
需要)或<vector>
包含在任何其他标准标头中。如评论中所述。
因此,用于 C++98 构建的编译器可能需要正确编译。