You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:10:04