如何通过模板中的对象向量获取迭代器?

时间:2010-03-19 12:09:15

标签: c++ templates gcc iterator

我正忙于用C ++实现Graph ADT。我有边缘和顶点的模板。在每个顶点,我有一个向量,包含指向它的边缘的指针。现在我试图在这些边缘上获得一个迭代器。这些是代码行:

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模板中声明对象的迭代器?编译器没有提供任何有用的反馈。

非常感谢 尼尔

1 个答案:

答案 0 :(得分:3)

如果该代码段来自模板,您可能遇到了依赖名称的问题 - 使用typename

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

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

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