2014-12-20 2 views
0

Введите код:Ошибка: Использование неидентифицированного типа 'Vertex'

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(); 
    } 
}; 

Однако, я получаю «использование неопределенного типа„Vertex“» ошибки внутри цикла в то время как в первом заявлении, хотя я дал класс Vertex прототип в начале. Некоторая помощь будет оценена, спасибо.

+4

Вам необходимо полное определение Vertex, а не просто форвардная декларация. – kec

+0

ну, сам класс «Вершина» использует класс «CPD», поэтому не вернемся к квадрату ... –

+1

'updateTable()' не должно быть встроенным. Переместите его в файл реализации. Тогда с тобой все будет хорошо. – kec

ответ

0

Пока дается только одно объявление Forward Vertex, компилятор ничего не знает об этом классе и его членах. Как это могло быть?

Тем не менее вам не нужны эти данные для декларации CPD. Компилятор просто должен знать, что класс Vertex существует для понимания сигнатур функций.

Таким образом, вы можете избежать взаимозависимости вершин и CPD. Как указывал @kec, решением было бы переместить определение updateTable() в другой файл, в который включено полное определение Vertex.

Файл Vertex.hpp:

class Vertex { 
    // declaration here 
}; 

Файл CPD.hpp: CPD.cpp

class Vertex; 

class CPD { 
    void updateTable(LinkedList<Vertex*>* parents); 
    // ... 
}; 

Файл:

#include "Vertex.hpp" 

void CPD::updateTable(LinkedList<Vertex*>* parents){ 
    // definition here 
} 
Смежные вопросы