错误:使用未识别的类型' Vertex'

时间:2014-12-20 16:21:23

标签: c++

这是代码;

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原型。一些帮助将不胜感激,谢谢。

1 个答案:

答案 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
}