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

error C2027: use of undefined type 'edge'

本文关键字:类型 edge 未定义 C2027 错误      更新时间:2023-10-16

在尝试编译时发生此错误。我寻求帮助,但所有的答案都集中在包括分隔文件。但这只是一个。cpp文件,所以它没有帮助。我在代码的开头提到了"类边缘"。我已经包括了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;
        }
    }
};

抱歉,这是我第一天上班

您在这里调用edge方法:

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

所以你需要完整的edge类定义。前向声明是不够的。

您可以通过将需要完整vertex定义的edge代码从edge定义中移动到实现文件中来修复此问题,反之亦然。