我有一个“ 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所做的一切都无法正常工作。
关于struct bucket是否有问题?还是不能创建指向刚刚声明的对象的指针数组?
我对编程很陌生,所以请不要因为早期的错误而讨厌我。
J.K.
最佳答案
您不能有以下语句
Eintrag[0]= &number1;
功能之外。因此,您需要在其他地方(大概是在构造函数中)执行此操作。
关于c++ - 我得到[错误]'Eintrag'没有命名类型,我不确定为什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23606050/