这是代码;
class Vertex;
class CPD
{
private:
width;
public:
void initialize()
{ .
.
.
}
void updateTable(LinkedList<Vertex*>* parents)
{
node<Vertex *> *ptr = parents->getHead();
int W = 1;
while (ptr)
{
W *= ((ptr->data)->getStates())->getSize();
ptr = ptr->next;
}
width = W;
initialize();
}
};
然而,我在第一个语句的while循环中得到了“使用未定义类型'Vertex'”错误,尽管我在开头给出了一个类Vertex原型。一些帮助将不胜感激,谢谢。
答案 0 :(得分:0)
只要给出Vertex的前向声明,编译器就不知道该类及其成员的任何信息。怎么可能呢?
尽管如此,CPD声明并不需要这些细节。编译器只需知道Vertex 类存在就可以理解函数签名。
这样,您可以避免Vertex和CPD的相互依赖性。正如@kec指出的那样,解决方案是将updateTable()的定义移动到另一个文件中,其中包含Vertex的完整定义。
文件Vertex.hpp:
class Vertex {
// declaration here
};
文件CPD.hpp:
class Vertex;
class CPD {
void updateTable(LinkedList<Vertex*>* parents);
// ...
};
文件CPD.cpp:
#include "Vertex.hpp"
void CPD::updateTable(LinkedList<Vertex*>* parents){
// definition here
}