2013-04-04 41 views
0

任何人都可以幫助我解決我在這裏得到的循環引用錯誤。試圖解決我的deque類和樹類之間的循環引用錯誤

我已經創建了我自己的deque類,breadthFirst方法使用FibTree

下面是來自單獨的標題和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,即完整的聲明應包括在我的dequeList情況下,所以我加了#include "deque.h"向前聲明class deque.h"以上,在fibtree。 h;但這扔16編譯錯誤的deque.h類,如這三個錯誤:「FibTree」尚未聲明FibTree::Node* data; in類dequeNode {...`

會有人能夠在哪些方面我可能會去這裏錯了嗎?

謝謝, 亞歷克斯

回答

1

文件fibtree.h似乎有失蹤 #ENDIF 末,在fibtree.cpp的開始和雙端隊列中添加#「deque.h」。h改變void enque(FibTree :: Node *); void const enque(const FibTree :: Node *)

+0

謝謝,我確實也有'const'聲明的不確定性。我覺得在這裏我確實有一個循環依賴問題,但是要感謝所有人(@JoachimPileborg @Oswald @Akobold)指出我不需要轉發declare,只需將'#include「deque.h」'添加到'fibtree .h'。現在都在工作:-) – Alex2134 2013-04-04 18:20:06

1

您必須在使用它的所有源文件deque.h。否則,你沒有完整的類定義。

1

FibTree類的定義不依賴於dequeList類。沒有必要在fibtree.h中轉發聲明dequeList

只有FibTree::breadthFirst的定義取決於dequeList。當您實施此方法時,FibTree類已爲人所知,您只需要#include deque.h

1

fitree.cpp你正在使用你的deque而不包括它的聲明。 您應該在此文件中添加#include "deque.h";

另外,fibtree.h最後應該有一個#endif