2012-11-02 118 views
1

我剛剛學習C++,並遇到很多問題。現在我試圖用堆和哈希表實現一個頻率隊列,所以我試圖爲散列表entrys和堆entrys創建結構。我做的是...不完整類型,正向聲明

1 #include<iostream> 
    2 #include<string> 
    3 #include "freqq.h" 
    4 
    5 using namespace std; 
    6 
    7 
    8 
    9 
10 struct _hashEntry { 
11 string word; 
12 int heapPstn; 
13 }; 
14 
15 struct _heapEntry { 
16 int frequency; 
17 hashEntry* wordInHash; 
18 }; 

^^ the .cpp, 
1 #define FREQQ_H_ 
    2 #include <string> 
    3 
    4 using namespace std; 
    5 
    6 class FreqQ { 
    7 public: 
    8 struct _heapEntry; 
    9 typedef struct _heapEntry heapEntry; 
10 
11 struct _hashEntry; 
12 typedef struct _hashEntry hashEntry; 
13 

^^ .h。爲了簡單起見,我已經消除了其他方法。

,我發現了錯誤 無效使用不完全類型的âstructFreqQ :: _heapEntryâ freqq.h:8:10:錯誤:âstructFreqQ :: _heapEntryâ

而且我想不通的向前聲明爲什麼要爲我的生活。

任何想法??

謝謝!

+1

我認爲問題在於編譯器認爲在類FreqQ中聲明的'struct _heapEntry;'是與源文件中聲明的'struct _heapEntry'不同的'struct _heapEntry'。我想你太努力了。你清楚地知道編程,但現在堅持使用簡單的C++語法。在FreqQ中丟失typedefs。 – john

+0

這就是我最初試圖做的,但它產生了相同的錯誤 – user1795370

+1

丟失typedef和結構。正如alestansis所說,將這些結構移到頭文件中。如果發佈更新的代碼仍然不清楚。 – john

回答

2

我不明白。您正在定義.cpp中的_hashEntry_heapEntry結構?

在聲明的class FreqQ之前將結構聲明移至.h,其中使用了結構。

+0

好吧我試過了,它現在說,hashEntry沒有聲明一個類型,在使用hashEntry的heapEntry結構中的行 – user1795370

+1

你在結構中缺少一個下劃線,它應該是'_hashEntry'而不是'hashEntry' – alestanis