c++ - 如何从模板中的对象 vector 上获取迭代器?

标签 c++ templates gcc iterator

我正忙于用 C++ 实现图形 ADT。我有边和顶点的模板。在每个顶点处,我都有一个 vector ,其中包含指向与其关联的边的指针。现在我试图在这些边缘上获得一个迭代器。这些是代码行:

vector<Edge<edgeDecor, vertexDecor, dir>*> edges = this->incidentEdges();
vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i;
for (i = edges.begin(); i != edges.end(); ++i) {

但是,编译器不会接受中间线。我对 C++ 很陌生。我错过了什么吗?为什么我不能在 Edge 模板的对象上声明迭代器?编译器没有提供任何有用的反馈。

非常感谢 尼尔

最佳答案

如果该片段来自模板,您可能遇到了相关名称的问题 - 使用 typename:

typename vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i;

typename 告诉编译器您指的是一个类型。没有它,依赖名称将被假定为不是类型或模板。

有关更多详细信息,请查看例如Comeaus template FAQ .

关于c++ - 如何从模板中的对象 vector 上获取迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477053/

相关文章:

c++ - 调用模板化成员的模板化方法

c++ - 从字符串转换为 64 位整数

c++ - 到处使用 std::size_t 是一种好习惯吗?

c++ - block 操作的特征矩阵库补码

C++ Mac | Conio替代品

c++ - 使用 SFINAE 检查是否存在非硬连线成员函数

C++错误: default template arguments may not be used in function template

c++ - 选择在 Windows 7 上无法正常工作

c++ - C++14中扣除 'auto func(int)'前使用 'auto'

c++ - 如何强制 GCC 警告类函数的使用?