0

谁能帮我解决我在这里遇到的循环引用错误。

我创建了自己的类,deque该类由breadthFirst.FibTree

以下是单独的 Header 和 CPP 文件中的亮点。文件中存在无效使用不完整类型前向声明错误的问题FibTree。我在下面的代码行中标记了这些错误。

双端队列

#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

纤维树.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[]) {
    ...

我在这里读过类似的帖子,在我的情况下,应该包含完整的声明dequeList,所以我#include "deque.h"在前向声明的上方添加class deque.h"fibtree.h;但这向deque.h类抛出了 16 个编译错误,例如这三个错误:'FibTree' has not been declared against FibTree::Node* data; inclass dequeNode {...`

任何人都可以在这里强调我可能会出错的地方吗?

谢谢,亚历克斯

4

4 回答 4

1

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

于 2013-04-04T11:08:08.510 回答
1

类的定义FibTree不依赖于dequeList类。无需转发声明dequeListin fibtree.h

只有 的定义FibTree::breadthFirst取决于dequeList。当你实现这个方法时,这个FibTree类是已知的,你只需要#include deque.h.

于 2013-04-04T11:08:34.750 回答
1

fitree.cpp你使用你的双端队列时不包括它的声明。您应该#include "deque.h"在此文件中添加;

还有,fibtree.h应该有一个#endif到底。

于 2013-04-04T11:12:11.527 回答
1

文件 fibtree.h 似乎在末尾缺少 #endif ,并在 fibtree.cpp 的开头添加 #include "deque.h" 并在 deque.h 中更改 void enque(FibTree::Node* ); 无效 enque( const FibTree::Node* )

于 2013-04-04T11:13:36.053 回答