我得到[错误]'Eintrag'没有命名类型,我不知道为什么

时间:2014-05-12 09:59:11

标签: c++ arrays pointers forward-declaration

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

1 个答案:

答案 0 :(得分:1)

您无法使用

等语句
Eintrag[0]= &number1;

在一个函数之外。所以你需要在其他地方这样做,大概是在构造函数中。