我对c ++比较陌生。我正在尝试创建图表类。我尝试在图构造函数中创建顶点向量,但是当我调用Vector.push_back
时我得到一个未定义的标识符错误#include <iostream>
#include <string>
#include <vector>
class Graph {
public: Graph(int vertexNum) {
for (int i = 0; i < vertexNum - 1; i++)
Vertex vert(i);
this->vertexList.push_back(vert);
}
private:
class Vertex {
public:
Vertex(int vertexId) {
this->vertId = vertexId;
}
int vertId;
};
std::vector<Vertex> vertexList;
};
我确定代码中还有其他逻辑错误,我还没有解决,我还在努力,但我想知道我在做什么向量错误。
以下是错误说明:
标识符&#34; vert&#34;是未定义的dijkstra main.cpp 9
&#39; vert&#39 ;:未声明的标识符dijkstra main.cpp 9
答案 0 :(得分:1)
在C ++之前,您可以使用变量,甚至在类定义中也需要声明它,只需将std :: vector的声明移动到使用它的构造函数之上就可以解决该错误。这就是人们通常为类创建标题的原因,因此所有声明都在其中完成,而.cpp包含实现。类似地,您需要对顶点类和边类进行相同的操作。此外,Graph实现依赖于Vertex类的存在,因此需要在Graph实现之前声明和实现Vertex类。另外,更重要的是你忘了在for循环中放置括号,这是主要的问题
#include <iostream>
#include <string>
#include <vector>
class Graph {
private:
class Vertex {
public:
int vertId;
Vertex(int vertexId) {
this->vertId = vertexId;
}
};
class Edge {
public:
Vertex* start;
Vertex* end;
int weight;
Edge(Vertex* start, Vertex* end, int weight) {
this->start = start;
this->end = end;
this->weight = weight;
}
};
public:
std::vector<Vertex> vertexList;
Graph(int vertexNum) {
for (int i = 0; i < vertexNum - 1; i++) {
Vertex vert(i);
this->vertexList.push_back(vert);
}
}
};
答案 1 :(得分:1)
这是压痕很重要的情况。你的for循环中没有大括号,所以它理解为
for (int i = 0; i < vertexNum - 1; i++) {
Vertex vert(i);
}
this->vertexList.push_back(vert);
现在有意义的是vert
未定义。