Может ли кто-нибудь помочь мне устранить ошибки круговой ссылки, которые я получаю здесь.
Я создал свой собственный deque
класс, который используется breadthFirst
метод FibTree
,
Ниже приведены основные моменты из отдельных файлов заголовка и CPP. Есть проблемы с недопустимое использование неполного типа а также ошибка предварительной декларации в FibTree
файлы. Я отметил эти ошибки в строках кода ниже.
deque.h
#ifndef DEQUE_H
#define DEQUE_H
#include "fibtree.h"
class dequeNode {
public:
FibTree::Node* data;
};
class dequeList {
public:
dequeNode* firstNode;
dequeNode* lastNode;
dequeList( void );
void enque( FibTree::Node* );
FibTree::Node* deque( void );
};
#endif
fibtree.h
#ifndef FIBTREE_H
#define FIBTREE_H
#include <iostream>
class dequeList; // ERROR: Forward declaration of 'struct dequeList' (2 ERRORS)
class FibTree {
public:
class Node {
...
};
Node const* root; // 'root' pointer to constant Node
FibTree (int);
void breadthFirst(Node const* root);
};
#endif
fibtree.cpp
#include "fibtree.h"
void FibTree::breadthFirst(Node const* root) { // Breadth-first traversal
dequeList* list = new dequeList(); //*** ERROR: Invalid use of incomplete type 'struct dequeList'
list->enque(root); //*** ERROR: Invalid use of incomplete type 'struct dequeList'
}
main.cpp
#include <iostream>
#include "deque.h"#include "fibtree.h"
int main (int argc, const char* argv[]) {
...
Я прочитал бы на подобном посте ВОТ, что полная декларация должна быть включена, в моем случае dequeList
вот я и добавил #include "deque.h"
выше предварительной декларации class deque.h"
, в fibtree.h; но это бросило 16 ошибок компиляции в deque.h
класс, такой как эти три ошибки: FibTree не был объявлен против FibTree::Node* data; in
class dequeNode {… `
Кто-нибудь сможет подсказать, где я могу пойти не так?
Спасибо,
Alex
файл fibtree.h, кажется, отсутствует
#endif
в конце и добавьте #include «deque.h» в начале fibtree.cpp и в deque.h измените void enque (FibTree :: Node *); аннулировать enque (const FibTree :: Node *)
Вы должны включить deque.h
во всем исходном файле, где он используется. В противном случае у вас нет полного определения класса.
Определение FibTree
класс не зависит от dequeList
учебный класс. Нет необходимости пересылать декларировать dequeList
в fibtree.h
,
Только определение FibTree::breadthFirst
зависит от dequeList
, Когда вы реализуете этот метод, FibTree
класс уже известен и вам нужно только #include deque.h
,
В fitree.cpp
вы используете свою деку без включения ее декларации.
Вы должны добавить #include "deque.h"
в этом файле;
Также, fibtree.h
должен иметь #endif
в конце.