尝试编译时发生此错误。我搜索了帮助,但所有答案都集中在包含分隔文件。但这只是一个.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;
}
}
};
...
抱歉结成形式,这是我的第一天。
答案 0 :(得分:4)
您在此处调用edge
方法:
(*it)->getVertex(this->name)->name
因此您需要完整的edge
类定义。前瞻声明是不够的。
您可以通过将需要完整edge
定义的vertex
代码移出edge
定义并转移到实现文件中来解决此问题,反之亦然。