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

C++类外访问类内vector修改值,解决operator[]赋值左值报错问题

问题原因

编译报错的核心是你当前实现的operator[]不支持赋值操作:

  • 现有operator[]是const成员函数,返回的是occupancy_t类型的临时值(右值),语法层面不允许作为赋值操作的左值
  • 要同时支持[]的读、写操作,需要额外提供非const版本的运算符重载,返回可修改的单元格引用
修复方案

替换你现有的operator[]实现,新增非const版本的重载:

/**
 *  非const版本:返回可修改的单元格引用,支持赋值操作
 */
occupancy_t& operator[](const Indices& idx)
{
  /// TO BE IMPLEMENTED    
  return occ_map[idx.x][idx.y];    
}

/**
 *  const版本:只读访问,适配const修饰的OccupancyGrid对象
 */
occupancy_t operator[](const Indices& idx) const
{
  /// TO BE IMPLEMENTED    
  return occ_map[idx.x][idx.y];    
}
可选优化建议(非必须,可规避无效代码风险)

你当前代码中data_指针完全没有参与栅格数据存储,构造函数里申请的单块内存和整个栅格没有关联,属于无效代码,建议删除避免不必要的内存泄漏:

  • 删除私有成员变量occupancy_t* data_;
  • 删除构造函数中data_= new occupancy_t(initial_value);语句
  • 删除析构函数中delete data_;语句

你已经使用std::vector<std::vector<occupancy_t>> occ_map存储栅格数据,vector会自动管理内存,不需要额外手动申请释放内存。

修改完成后测试用例即可正常编译通过。

内容的提问来源于stack exchange,提问作者Kiran Sai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:09:02