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

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

以下是来自单独的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


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


我曾读过类似的文章HERE,在dequeList的情况下,应包括完整的声明,因此我在fibtree.h中的前向声明#include "deque.h"上方添加了class deque.h";但这给deque.h类带来了16个编译错误,例如这三个错误:没有针对FibTree::Node* data; in类dequeNode {...`声明'FibTree'。

有人能强调我可能在这里出问题吗?

谢谢,
亚历克斯

最佳答案

文件fibtree.h似乎缺少
    #万一
在结尾处,在fibtree.cpp的开头添加#include“ deque.h”,在deque.h中更改void enque(FibTree :: Node *);使enque(const FibTree :: Node *)无效

08-05 21:10