2012-11-02 90 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