我有一个“ 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/

10-11 21:46