Попытка устранить ошибку циклической ссылки между моим классом deque и классом дерева

Может ли кто-нибудь помочь мне устранить ошибки круговой ссылки, которые я получаю здесь.

Я создал свой собственный 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; inclass dequeNode {… `

Кто-нибудь сможет подсказать, где я могу пойти не так?

Спасибо,
Alex

0

Решение

файл fibtree.h, кажется, отсутствует
#endif
в конце и добавьте #include «deque.h» в начале fibtree.cpp и в deque.h измените void enque (FibTree :: Node *); аннулировать enque (const FibTree :: Node *)

1

Другие решения

Вы должны включить deque.h во всем исходном файле, где он используется. В противном случае у вас нет полного определения класса.

1

Определение FibTree класс не зависит от dequeList учебный класс. Нет необходимости пересылать декларировать dequeList в fibtree.h,

Только определение FibTree::breadthFirst зависит от dequeList, Когда вы реализуете этот метод, FibTree класс уже известен и вам нужно только #include deque.h,

1

В fitree.cpp вы используете свою деку без включения ее декларации.
Вы должны добавить #include "deque.h" в этом файле;

Также, fibtree.h должен иметь #endif в конце.

1