您好我对C ++中typedef的用法有疑问。我正在尝试创建自己的图表类,我可以在其中执行DFS和BFS。到目前为止,我已经为课程附上了我所拥有的东西。但是每次我尝试编译时都遇到了一些我不知道如何解决的错误。我确定错误与我用来保存所有顶点的变量vertexList有关。
#include <iostream>
#include <stack>
class myGraph{
public:
typedef struct Vertex{
char label;
bool visited;
}Vertex;
myGraph(int);
void AddVertex(char);
void addEdge(int, int);
int adjUnvisited(int);
void displayVertex(int);
void dfs();
private:
Vertex* vertexList;
int** adjMatrix;
int size;
int vertices;
int count;
};
myGraph::myGraph(int size){
count = 0;
size = size;
vertices = size;
vertexList = new Vertex[vertices];
adjMatrix = new int*[size];
for(int i=0; i<size; i++){
adjMatrix[i] = new int[vertices];
}
for(int i=0; i<vertices; i++){
for(int j=0; j<vertices; j++){
adjMatrix[i][j] = 0;
}
}
}
void myGraph::AddVertex(char label){
Vertex* myVertex = new Vertex();
myVertex->label = label;
myVertex->visited = false;
vertexList[count++] = myVertex;
}
void myGraph::addEdge(int a, int b){
adjMatrix[a][b] = 1;
adjMatrix[b][a] = 1;
}
int myGraph::adjUnvisited(int index){
for(int i=0; i<vertices; i++){
if(adjMatrix[i][index]==1 && vertexList[i]->visited==false){
return i;
}
}
return -1;
}
void myGraph::displayVertex(int index){
std::cout << "Current vertex: " << vertexList[index]->label << std::endl;
}
void myGraph::dfs(){
std::stack<int> myStack;
int temp = 0;
vertexList[temp]->visited = true;
myStack.push(temp);
int unvisitedVertex;
while(!myStack.empty()){
unvisitedVertex = adjUnvisited[myStack.top()];
if(unvisitedVertex!=-1){
myStack.push(unvisitedVertex);
displayVertex(unvisitedVertex);
vertexList[unvisitedVertex]->visited = true;
}else{
myStack.pop();
}
}
}
我得到的错误信息是:
没有可行的重载'='vertexList [count ++] = myVertex;
还有一个注释:
候选函数(隐式复制赋值 operator)不可行:没有已知的'struct Vertex *'转换为 第一个参数的'const myGraph :: Vertex';用*取消引用参数 struct Vertex {
还有其他一些错误消息(我确定这些消息非常小,我可以解决它们):
成员引用类型'struct Vertex'不是 指针;也许你打算用'。'? if(adjMatrix [i] [index] == 1&amp;&amp; vertexList [i] - &gt; visited == false){
必须调用对非静态成员函数的引用 unvisitedVertex = adjUnvisited [myStack.top()];
现在我不确定我到底做错了什么,并且想知道这里是否有人可以帮助我。
非常感谢你的帮助!
答案 0 :(得分:1)
您已将vertexList
声明为指向Vertex
的指针 - 这很公平,因为它将成为一个数组。但这意味着该数组的每个元素都是Vertex
结构 - 但您正在访问每个数组元素,就像它是一个指针一样。
或者:
->
替换为.
s,并在AddVertex()
vertexList
声明为Vertex **
(如adjMatrix
)