【发布时间】:2014-05-14 01:50:57
【问题描述】:
我在尝试编译时出现此错误。我寻求帮助,但所有答案都集中在包括分隔文件上。但这只是一个 .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类型之前,您在vertex函数的定义中使用了edge类型。在这种情况下,声明是不够的。如果您将edge定义移到vertex之前,则您的情况应该有效,并改为转发声明vertex。 -
将类声明放在头文件中,将成员函数的实现放在Cpp文件中。
-
谢谢,我不知道这个方法