我有一个类“Extendiblehashing”,其中有一个带有size_t n,t的结构“Bucket”和一个名为values [B]的B类E对象数组。 我想要实现的是,通过构造一个Extendiblehashing对象,我得到一个Bucketpointers数组(这里称为Eintrag,应该只用1个指针开始)到一个简单的Bucket(Bucket在我的情况下称为number1)我以后可以在Extendiblehashing类的方法中动态更改为指向更多存储桶的更多指针的列表。
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。
答案 0 :(得分:1)
您无法使用
等语句Eintrag[0]= &number1;
在一个函数之外。所以你需要在其他地方这样做,大概是在构造函数中。