错误C2027:使用未定义类型'edge'

时间:2014-05-13 17:43:27

标签: c++ class types undefined

尝试编译时发生此错误。我搜索了帮助,但所有答案都集中在包含分隔文件。但这只是一个.cpp文件,所以它没有帮助。我提到了#34; class edge;"在代码的开头。我已经包含了iostream,string,map和set。

以下是代码:

...

using namespace std;

class edge;

class vertex{
public:
    string name;
    set<edge*> edges;
    int distance;

    vertex(string name){
        this->name = name;
    }

    void print_neighbours(){
        cout << "vertex:" << name << "    neighbours: ";
        for(set<edge*>::iterator it = edges.begin(); it != edges.end(); it++){
            cout << (*it)->getVertex(this->name)->name << " "; //compile error here
        }
        cout << endl;
    }   
};

class edge{
public:
    vertex* from;
    vertex* to; 
    int length;

    edge(vertex* ver1, vertex* ver2, int length=1){
        this->from = ver1;
        this->to = ver2;
        this->length = length;
    }

    vertex* getVertex(string v1){
        if(v1 == this->from->name){
            return this->to;
        }
        else if(v1 == this->to->name){
            return this->from;
        }
    }

};

...

抱歉结成形式,这是我的第一天。

1 个答案:

答案 0 :(得分:4)

您在此处调用edge方法:

(*it)->getVertex(this->name)->name

因此您需要完整的edge类定义。前瞻声明是不够的。

您可以通过将需要完整edge定义的vertex代码移出edge定义并转移到实现文件中来解决此问题,反之亦然。