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.