【发布时间】:2016-02-24 12:40:20
【问题描述】:
在具有两种实例化类型(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...
};
【问题讨论】:
-
你的“模板类”是什么样子的?
-
显示一个最小的完整示例。
-
您的示例在此处的多个编译器版本中可以干净地编译(此外,在
const_iterator之后缺少;)。 -
在类定义前是否包含
<vector>和<utility>? -
是的,不能保证
<utility>(std::pair需要)包含在任何其他标准标头中。因此,您用于 C++98 构建的编译器可能要求它正确编译。
标签: c++ c++11 iterator c++98 typename