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。我真的认为单词静态是不必要的,或者我遗漏了什么?显示类成员初始化的一些限制。也许这就是原因。