簡體   English   中英

Graph .h文件和.cpp文件即時錯誤

[英]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可以嵌套,並且您具有nodeTarcT全局聲明。 它們在全局命名空間中,因此您正在制作::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM