2014-05-12 68 views
0

我有一個類「Extendiblehashing」,並在它的結構「桶」size_t n,t和B類E的數組稱爲值的對象[B]。 我想要實現的是,通過構建一個Extendiblehashing對象,我得到一個Bucketpointers(這裏叫做Eintrag,應該只有一個指針開始)到一個簡單的Bucket(Bucket在我的情況下稱爲number1)的數組,我可以稍後在類Extendiblehashing的一個方法中動態更改爲更多指向更多存儲桶的指針列表。我得到[錯誤]'Eintrag'沒有命名一個類型,我不知道爲什麼

template <typename E, size_t B=7 > 
class Extendiblehashing : public Container<E> { 

struct Bucket { 
    size_t n; //wieviel ist belegt? 
    size_t t; // lokale Tiefe 
    E values[B]; 
    Bucket(): n(0), t(0) {}; 
    bool member (const E& e) const { for (int i=0; i<n; ++i) if (e==values[i]) return true; 
    return false; 
    }; 
    bool append(const E&e) { if (n==B) return false; values[n++]=e; return true;}; 
}; 

size_t pow(size_t a, size_t b) {size_t u=1; for (int i=0; i<b;++i) u=u*a; return u; }; 
size_t d; //globale Tiefe 

Bucket number1(); 
Bucket * Eintrag[1]; 
Eintrag[0]= &number1; 
size_t n; //Zähler der gespeicherten Elemente 

void sort() const; 
public: 
Extendiblehashing() : n(0), d(0) {} 
virtual ~Extendiblehashing() { delete[] Eintrag;} 

改變的Eintrag陣列會是這樣的方法:

template <typename E, size_t B> 
void Extendiblehashing<E,B>::inc() { 
    Bucket * newEintrag = new Bucket[pow(2,d+1)]; 
    for (int i=0;i<pow(2,d);i++) 
    newEintrag[i]=*Eintrag[i]; 
    for (int i=pow(2,d),j=0;i<pow(2,d+1);i++,j++) 
    newEintrag[i]=*Eintrag[j]; 
    d=d+1; 
    delete[] Eintrag; 
    Eintrag= newEintrag; 
    } 

當編譯我得到的錯誤是「‘Eintrag’沒有指定類型」,因此我用Eintrag一切不起作用。 有關結構桶的問題嗎?或者我不能創建一個指向剛剛聲明的對象的指針數組?

我對編程相當陌生,所以請不要因爲早期的錯誤而恨我。 非常感謝,J.K.

回答

1

你不能有語句,如

Eintrag[0]= &number1; 

之外的功能。所以你需要在別處做,大概是在構造函數中。

相關問題