我正忙于用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模板中声明对象的迭代器?编译器没有提供任何有用的反馈。
非常感谢 尼尔
答案 0 :(得分:3)
如果该代码段来自模板,您可能遇到了依赖名称的问题 - 使用typename
:
typename vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i;
typename
告诉编译器你指的是一个类型。没有它,假定依赖名称不是类型或模板。
有关详细信息,请查看例如Comeaus template FAQ