【问题标题】:C++ HashTable, two same implementations but one gives an errorC++ HashTable,两个相同的实现,但一个给出错误
【发布时间】:2018-09-14 07:41:52
【问题描述】:

下面的代码会产生这个错误:

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() 中的代码没有错误,但是当我声明 NODE arr1[DIMENSION]; 时,class HASHTABLE 中的代码出现错误:int(10) a nonstatic member reference must be relative to specific object.

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

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

谁能解释一下幕后发生了什么?

另外,我希望我明白这一点:

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

【问题讨论】:

    标签: c++ static hashtable


    【解决方案1】:

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

    它们是不同的。对于class case,如果不加static,每个HASHTABLE实例都有自己的DIMENSION。

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

    我坚持使用 const 得到保护

    const是防止变量被写入。但是类中的static是声明实例之间的共享变量。

    【讨论】:

    • 您好,感谢您的回答。但我只是不明白为什么它需要是static?它已经是 const,所以每个 HASHTABLE 实例的 DIMENSION=10。我真的认为 static 这个词是不必要的,或者我错过了什么?
    • here 显示了类成员初始化的一些限制。可能是这个原因。
    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多