C++ C++;HashTable,两个相同的实现,但其中一个给出了错误

C++ C++;HashTable,两个相同的实现,但其中一个给出了错误,c++,static,hashtable,C++,Static,Hashtable,下面的代码产生此错误: class HASHTABLE { public: const int DIMENSION = 10; struct NODE { char* INFO; NODE* LINK; }; NODE arr1[DIMENSION]; }; int main() { const int dimension=10; struct node { char* info; node* link; }; no

下面的代码产生此错误:

class HASHTABLE
{
public:
  const int DIMENSION = 10;
  struct NODE
  {
     char* INFO;
     NODE* LINK;
  };
  NODE arr1[DIMENSION];
};


int main()
{
  const int dimension=10;
  struct node
  {
    char* info;
    node* link;
  };
  node arr2[dimension];
};
因此,当我声明
节点arr1[DIMENSION]时,
int main()
中的代码没有给出错误,但
类哈希表中的代码给出错误我得到错误:
int(10)非静态成员引用必须相对于特定对象。

解决方案很明显,只需将
static const int DIMENSION=10并且我没有得到任何错误

<>但是,对于C++的理解,在主> <代码>和<代码>类< /代码>中的代码是相同的。 有人能解释一下幕后发生了什么吗

此外,我希望我能理解这一点:

如果我将
维度
声明为静态,那么我使用
哈希表
创建的每个对象也将具有相同的
维度
,但我认为这是通过使用
常量
实现的

<> P>但对于我理解C++,主代码和类中的代码是相同的。 他们是不同的。对于类case,如果不添加
static
,哈希表的每个实例都有自己的维度

我发现,如果要在
类中执行此操作,则需要
常量static
。 我猜编译错误是因为如果维度未声明为
static
,编译器无法确定维度的值

我认为这是通过使用const实现的


const
用于防止写入变量。但是类中的
static
是在实例之间声明一个共享变量。

您好,谢谢您的回答。但是我不明白为什么它需要是静态的?它已经是常量了,所以哈希表的每个实例的维度都是=10。我真的认为单词
静态
是不必要的,或者我遗漏了什么?显示类成员初始化的一些限制。也许这就是原因。