2014-10-16 34 views
0

我想了解鏈接列表和節點,我不明白我得到我的節點結構中的這個錯誤。這是在頭正向聲明導致頭文件中的問題

#ifndef SENTENCE_H 
#define SENTENCE_H 

#include"word.h" 

class Sentence{ 
    public: 
     struct Node{ 
      Word data; 
      Node * next; 
     }; 
      //etc 
#endif // SENTENCE_H 

工作完全正常,沒有預先聲明,但隨後的代碼,我不得不補充說,需要我的時候我嘗試這個現在改爲

#ifndef SENTENCE_H 
#define SENTENCE_H 

class Sentence; 

#include"paragraph.h" 
#include"word.h" 

class Sentence{ 
    public: 
     struct Node{ 
      Word data; 
      Node * next; 
     }; 
     //etc, etc 

函數原型編譯這我得到一個錯誤:字段'數據'具有不完整的類型。如果我註釋掉結構,一切正常。我究竟做錯了什麼?我相信這是製作節點的正確方法嗎?正如在一個句子中是一個帶有單詞的節點的鏈表一樣。因此'數據'是一個字,接下來是一個指向節點的指針。由於include語句,Word類型應該是可以接受的,我對函數原型「Word first();」沒有任何問題。在代碼的其他部分,爲什麼它告訴我'數據'有一個不完整的類型?

+0

你爲什麼要在自己的頭文件中聲明Sentence? – DaveyLaser 2014-10-16 18:59:47

+0

罪魁禍首顯然是'Word'。但是你沒有說明'Word'是如何聲明的。它是如何聲明的? – AnT 2014-10-16 19:04:47

+1

@laser_wizard因爲我的paragraph.h需要知道句子類 – 2014-10-17 18:39:31

回答

1

我的水晶球告訴我你的問題與前向聲明無關,並且與循環頭文件包含有關。同一球告訴我,在某點word.h直接或間接開始包括sentence.h。現在,由於您的sentence.h也包含word.h,因此產生了循環包含循環。

除了奇怪的「無法解釋的」編譯錯誤之外,循環包含並沒有實現任何功能。