C++ 试图解决deque类和tree类之间的循环引用错误

C++ 试图解决deque类和tree类之间的循环引用错误,c++,forward-declaration,cyclic-reference,C++,Forward Declaration,Cyclic Reference,有人能帮我解决我这里遇到的循环引用错误吗 我创建了自己的deque类,该类由FibTree的breadthFirst方法使用 下面是单独的头文件和CPP文件的突出显示。FibTree文件中存在无效使用不完整类型和转发声明错误的问题。我已经在下面的代码行中标记了这些错误 deque.h #ifndef DEQUE_H #define DEQUE_H #include "fibtree.h" class dequeNode { public: FibTree::Node* data; }

有人能帮我解决我这里遇到的循环引用错误吗

我创建了自己的
deque
类,该类由
FibTree
breadthFirst
方法使用

下面是单独的头文件和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
#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.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
#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
main.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'
}
#include <iostream>

#include "deque.h"
#include "fibtree.h"

int main (int argc, const char* argv[]) {
    ...
#包括
#包括“deque.h”
#包括“fibtree.h”
int main(int argc,const char*argv[]{
...
我在一篇类似的帖子上读到,在我的
dequeList
案例中,应该包含完整的声明,因此我在转发声明
类deque.h上方添加了
#include“deque.h”
,在fibtree.h中;但这会向
deque.h
类抛出16个编译错误,例如这三个错误:'fibtree'未针对
fibtree::Node*数据声明;
类dequeNode{`

有谁能强调一下我在这里可能出了什么问题

谢谢,
Alex

您必须在使用它的所有源文件中包含
deque.h
。否则您没有完整的类定义。

您必须在使用它的所有源文件中包含
deque.h
。否则您没有完整的类定义。

FibTree类的定义不依赖于在
dequeList
类中。无需在
fibtree.h
中向前声明
dequeList


只有
FibTree::breadthFirst
的定义取决于
dequeList
。当您实现此方法时,
FibTree
类已经是已知的,您只需要
#包含deque.h

FibTree
类的定义不取决于
dequeList
类。没有need在
fibtree.h
中转发声明
dequeList


只有
FibTree::breadthFirst
的定义取决于
dequeList
。当您实现此方法时,
FibTree
类是已知的,您只需要
fitree.cpp
中包含deque.h

,就可以使用您的deque而不包含它的声明。 您应该在该文件中添加
#包括“deque.h”


另外,
fibtree.h
最后应该有一个
#endif

fitree.cpp
中,您正在使用您的数据,但不包括它的声明。 您应该在该文件中添加
#包括“deque.h”


另外,
fibtree.h
最后应该有一个
#endif

文件fibtree.h似乎缺少一个 #恩迪夫
最后,在fibtree.cpp的开头添加#include“deque.h”,并在deque.h中更改void enque(fibtree::Node*);将void enque(const fibtree::Node*)

文件fibtree.h似乎缺少 #恩迪夫
最后,在fibtree.cpp的开头添加#include“deque.h”,并在deque.h中更改void enque(fibtree::Node*);将void enque(const fibtree::Node*)

谢谢,我确实与
const
声明有不一致之处。我觉得我在这里确实存在循环依赖性问题,但感谢大家(@JoachimPileborg@Oswald@Akobold)指出我不需要转发声明,只需将
#包括“deque.h”
fibtree.h
。现在一切正常:-)谢谢,我确实与
const
声明有矛盾之处。我觉得我在这里有一个循环依赖性问题,但要感谢大家(@JoachimPileborg@Oswald@Akobold)指出我不需要转发声明,只需添加
#在
fibtree.h
中包含“deque.h”
。所有工作现在:-)