C++哈希表构造函数中为何无法使用箭头运算符访问成员?
问题解答:为什么不能用
->访问哈希表数组元素的成员? 你的代码里,m_Table = new item[m_TableSize]是动态分配了一个**item类型的对象数组**,不是你以为的“指针数组”,这就是核心原因:
new item[N]返回的是指向数组首元素的item*指针,m_Table[i]等价于*(m_Table + i),它是数组里第i个实实在在的item对象,不是指针。.运算符用于直接访问对象的成员,而->是(*指针).成员的语法糖,只能用来访问指针指向对象的成员。- 当你写
m_Table[i]->name时,编译器会误以为m_Table[i]是一个指针类型,尝试调用它的->运算符,但item结构体本身没有重载这个运算符,所以才会报出“type 'HashTable::item' does not have an overloaded 'member operator ->'”的错误。
如果是要创建指针数组(比如每个元素都是指向item的指针),代码应该是这样的:
item** m_Table = new item*[m_TableSize]; for (int i = 0; i < m_TableSize; i++) { m_Table[i] = new item; // 每个指针指向一个动态分配的item对象 m_Table[i]->name = "empty"; // 这时候才能用-> }
但你的哈希表实现里用的是对象数组,所以用.访问成员才是正确的写法。
内容的提问来源于stack exchange,提问作者AcKoucher
相关产品推荐
相关产品推荐

