[英]Graph .h file and .cpp file im getting many errors
我有以下代碼:
using namespace std;
struct nodeT;
struct arcT;
class Graph
{
public:
Graph(string xd);
void addnode(string name,float xval,float yval);
void addarc(string n1,string n2,float dist);
void printarcs();
private:
struct graphT
{
vector<nodeT *>nodes;
vector<arcT * > arcs;
map<string,nodeT * > nodemap;
};
struct nodeT{
string nodename;
float x,y;
vector<arcT * > arcs;
};
struct arcT{
nodeT * start;
nodeT * finish;
float distance;
};
void arcfinal(nodeT * a,nodeT * b, float len);
graphT * g;
//graphT *g=new graphT;
};
//#include "BST.cpp"
#endif
#include "Graph.h"
Graph::Graph(string xd)
{
g=new graphT;
}
void Graph::addnode(string name,float xval,float yval)
{
//if(!nodemap[name])
nodeT *t=new nodeT;
t->nodename=name;
t->x=xval;
t->y=yval;
g->nodes.push_back(t);
g->nodemap[name]=t;
}
void Graph::addarc(string n1,string n2,float dist)
{
nodeT * t1=g->nodemap[n1];
nodeT * t2=g->nodemap[n2];
arcfinal(t1,t2,dist);
arcfinal(t2,t1,dist);
}
void Graph::arcfinal(nodeT * a,nodeT * b, float len)
{
arcT * d=new arcT;
d->start=a;
d->finish=b;
d->distance=len;
g->arcs.push_back(d);
a->arcs.push_back(d);
}
void Graph::printarcs()
{
for(arcT * curr=g->arcs.begin();curr != g->arcs.end();++curr)
{
cout<<curr->start->nodename<<"-----"<<curr->finish->nodename<<"----"<<curr->distance<<endl;
}
}
//#endif
我收到此錯誤:
projects \\ graphsearch \\ graphsearch \\ graph.cpp(21):錯誤C2664:'std :: vector <_Ty> :: push_back':無法將參數1從'Graph :: nodeT *'轉換為'nodeT * const&'。 ..
有人可以調試嗎?
至少有三個錯誤。
首先是struct
可以嵌套,並且您具有nodeT
和arcT
全局聲明。 它們在全局命名空間中,因此您正在制作::nodeT*
向量,但實際的結構是Graph::nodeT*
。
將聲明從頂部移到private:
下的結構內部。 這是向前聲明它們的正確方法。
第二個是begin
可能
不會返回arcT*
,您應該使用auto
。
第三個是begin
向該元素返回一個迭代器,因此您需要對其取消引用以獲取指針,然后再次對其進行引用以獲取成員,例如
cout << (*curr)->start->nodename << "-----" << (*curr)->finish->nodename << "----" << (*curr)->distance << endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.