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.hFibTree
类的定义不取决于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”
。所有工作现在:-)