我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?

I'm seeing "use of undeclared identifier" error, can someone tell me how to fix it?

本文关键字:何解决 告诉我 解决 undeclared of use identifier 错误 我看      更新时间:2023-10-16

我收到了以下代码的错误消息。我是C++新手,所以我看不出有什么问题。非常感谢。

头文件(VGMap.h(:

#ifndef VGMAP_H
#define VGMAP_H
namespace Game
{
struct AdjListNode{
int data;
AdjListNode *next;
};
struct AdjList{
AdjListNode *head;
};
struct Graph{
int V;
AdjList *arr;
};
class vgmap{
public:
AdjListNode *newAdjListNode(int);
Graph *createGraph(int);
void addEdge(Graph*,int,int);
void printGraph(Graph*);  
};

}#endif

VGMap.cpp:

#include "VGMap.h"
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::string;
namespace Game
{
AdjListNode* vgmap::newAdjListNode(int data){
AdjListNode *nptr=new AdjListNode;
nptr->data=data;
nptr->next=NULL;
return nptr;
}
Graph* vgmap::createGraph(int V){
Graph *graph=new Graph;
graph->V=V;
graph->arr=new AdjList[V];
//initialize with NULL (e.g root=NULL)
for(int i=0;i<V;i++){
graph->arr[i].head=NULL;
}
return graph;
}
void vgmap::addEdge(Game::Graph *graph, int src, int dest){
AdjListNode *nptr=newAdjListNode(dest);
nptr->next=graph->arr[src].head;
graph->arr[src].head=nptr;
//connect from dest to src (since undirected)
nptr=newAdjListNode(src);
nptr->next=graph->arr[dest].head;
graph->arr[dest].head=nptr;
}
void vgmap::printGraph(Game::Graph *graph){
for(int i=0;i<graph->V;i++){
AdjListNode *root=graph->arr[i].head;
if(i==4||(i-4)%5==0){
cout<<std::endl;
}
else if(i%5==0){
cout<<i<<" ";
}
while(root!=NULL){
if(root->data==i+1){
cout<<root->data<<" ";
//i=i+1;
}
root=root->next;
}
}
}
}

主.cpp:

#include <iostream>
#include <ctime>
#include "VGMap.h"
using Game::AdjListNode;
using Game::AdjList;
using Game::Graph;
using Game::vgmap;
using std::cout;
using std::cin;
using std::endl;
int main()
{
int totalVertices=30;
Graph *graph;
graph=createGraph(totalVertices);
//connect edge
for(int i=0;i<4;i++){
addEdge(graph,i,i+1);
}
for(int i=5;i<9;i++){
addEdge(graph,i,i+1);
}
for(int i=10;i<14;i++){
addEdge(graph,i,i+1);
}
for(int i=15;i<19;i++){
addEdge(graph,i,i+1);
}
for(int i=20;i<24;i++){    
addEdge(graph,i,i+1);
}
for(int i=29;i>25;i--){
addEdge(graph,i,i-1);
}
for(int i=0;i<5;i++){
addEdge(graph,25-i*5,25-(i+1)*5);
}
for(int i=0;i<5;i++){
addEdge(graph,1+i*5,1+(i+1)*5);
}
for(int i=0;i<5;i++){
addEdge(graph,2+i*5,2+(i+1)*5);
}
for(int i=0;i<5;i++){
addEdge(graph,3+i*5,3+(i+1)*5);
}
for(int i=0;i<5;i++){
addEdge(graph,4+i*5,4+(i+1)*5);
}
printGraph(graph);
}

这是我收到的错误消息:

main.cpp:47:11: error: use of undeclared identifier 'createGraph'
graph=createGraph(totalVertices);
^
main.cpp:50:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i+1);
^
main.cpp:53:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i+1);
^
main.cpp:56:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i+1);
^
main.cpp:59:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i+1);
^
main.cpp:62:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i+1);
^
main.cpp:65:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,i,i-1);
^
main.cpp:68:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,25-i*5,25-(i+1)*5);
^
main.cpp:71:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,1+i*5,1+(i+1)*5);
^
main.cpp:74:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,2+i*5,2+(i+1)*5);
^
main.cpp:77:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,3+i*5,3+(i+1)*5);
^
main.cpp:80:7: error: use of undeclared identifier 'addEdge'
addEdge(graph,4+i*5,4+(i+1)*5);
^
main.cpp:82:5: error: use of undeclared identifier 'printGraph'
printGraph(graph);
^
13 errors generated.

没有定义createGraphaddEdge的函数。 但是,有一些方法称为vgmap::createGraphvgmap::addEdge.

不过,您不能像这样调用这些方法,因为您需要首先创建一个vgmap的实例,然后在该对象上调用方法。

由于这些方法不作用于任何内部数据,因此请将其定义更改为static

class vgmap{
public:
static AdjListNode *newAdjListNode(int);
static Graph *createGraph(int);
static void addEdge(Graph*,int,int);
static void printGraph(Graph*);  
};

然后,您可以使用全名调用它们,而无需创建vgmap的实例:

graph=vgmap::createGraph(totalVertices);
...
vgmap::addEdge(graph,i,i-1);
...
相关文章: