0

ここで発生している循環参照エラーを解決するのを手伝ってくれる人はいますか?

のメソッドでdeque使用される独自のクラスを作成しました。breadthFirstFibTree

以下は、個別のヘッダー ファイルと 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[]) {
    ...

同様の投稿HEREを読んで、私の場合は完全な宣言を含める必要があると読んだので、fibtree.hの前方宣言の上dequeListに追加しました。しかし、これにより、次の 3 つのエラーのような16 のコンパイル エラーがクラスにスローされました。#include "deque.h"class deque.h"deque.hFibTree::Node* data; in

ここで私が間違っている可能性がある場所を誰かが強調できますか?

ありがとう、アレックス

4

4 に答える 4

1

クラスの定義はFibTreeクラスに依存しませんdequeList。で前方宣言する必要はありませdequeListfibtree.h

の定義のみが にFibTree::breadthFirst依存しdequeListます。このメソッドを実装すると、FibTreeクラスは既知であり、あとは#include deque.h.

于 2013-04-04T11:08:34.750 に答える
1

fitree.cpp宣言を含めずに両端キューを使用しています。#include "deque.h"このファイルに追加する必要があります。

また、最後にfibtree.ha が必要です。#endif

于 2013-04-04T11:12:11.527 に答える
1

the file fibtree.h seems to have a missing #endif at the end , and add #include "deque.h" at the beginning of fibtree.cpp and in deque.h change void enque( FibTree::Node* ); to void enque( const FibTree::Node* )

于 2013-04-04T11:13:36.053 に答える