下面的代码产生此错误:

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];
};


因此,int main()中的代码没有错误,但是当我声明class HASHTABLE时却出现了NODE arr1[DIMENSION];中的代码:int(10) a nonstatic member reference must be relative to specific object.

解决方案很明显,只需将static const int DIMENSION = 10;放进去,我就不会出错。

但是就我对C ++的了解程度而言,mainclass中的这段代码是相同的。

有人可以解释幕后发生的事情吗?

另外,我希望我能理解:

如果我将DIMENSION声明为静态对象,则我使用HASHTABLE创建的每个对象也将具有相同的DIMENSION,但是我认为通过使用const来保护它吗?

最佳答案

但是对于我了解c ++的程度来说,这段代码在main和class中是相同的。


他们是不同的。对于类情况,如果不添加static,则HASHTABLE的每个实例都有其自己的DIMENSION。

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


  我通过使用const确保了安全


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

关于c++ - C++ HashTable,两个相同的实现,但其中一个给出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52327187/

10-11 19:38