传递const std::vector<const CSensor*>参数丢失限定符的编译错误求助
问题解析与解决方案
问题核心
你遇到的编译器错误和vector或指针的const修饰无关,问题出在**setSensor被声明为const成员函数**。
C++里,const成员函数的本质是承诺“不会修改类的非mutable成员变量”,但你的代码里table.push_back(pSensor)明显在修改成员容器table的内容,这直接违反了const成员函数的约定,所以编译器会报错。
两种解决办法
去掉成员函数的
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"); }将
table标记为mutable
如果因为某些场景限制,必须让setSensor保持const(比如要在const对象上调用这个方法),可以把成员变量table声明为mutable,这样const成员函数也能修改它:mutable vector <const CSensor *> table;注意:
mutable要谨慎使用,只有当这个变量的修改不会破坏对象的“逻辑常量性”时才适合用。
内容的提问来源于stack exchange,提问作者David Aesthetic
相关产品推荐
相关产品推荐

