下面的代码产生此错误:
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 ++的了解程度而言,
main
和class
中的这段代码是相同的。有人可以解释幕后发生的事情吗?
另外,我希望我能理解:
如果我将
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/