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

传递const std::vector<const CSensor*>参数丢失限定符的编译错误求助

问题解析与解决方案

问题核心

你遇到的编译器错误和vector或指针的const修饰无关,问题出在**setSensor被声明为const成员函数**。

C++里,const成员函数的本质是承诺“不会修改类的非mutable成员变量”,但你的代码里table.push_back(pSensor)明显在修改成员容器table的内容,这直接违反了const成员函数的约定,所以编译器会报错。

两种解决办法

  1. 去掉成员函数的const修饰
    如果setSensor的本来作用就是给对象添加传感器(修改对象状态),那它根本不应该是const成员函数,直接去掉末尾的const即可:

    void CBase::setSensor(const CSensor *pSensor) 
    {
      if(table.size() < size_of_table) 
      {
        table.push_back(pSensor) ;
      }
      else
        throw CException("Przekroczono rozmiar tablicy , pozostale sensory nie zostaly dodane");
    }
    
  2. 将table标记为mutable
    如果因为某些场景限制,必须让setSensor保持const(比如要在const对象上调用这个方法),可以把成员变量table声明为mutable,这样const成员函数也能修改它:

    mutable vector <const CSensor *> table;
    

    注意:mutable要谨慎使用,只有当这个变量的修改不会破坏对象的“逻辑常量性”时才适合用。

内容的提问来源于stack exchange,提问作者David Aesthetic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:21:02