";Const";C++中不兼容的类型限定符问题


Point Point::add(Point& a,Point& b) {
Point result {};
size_t length {std::max(a._vector.size(),b._vector.size())};
for(size_t i {1};i<=length;++i) {
result._vector.push_back(a.get(i)+b.get(i));
}
return std::move(result);
}

上面的代码运行良好,但将签名更改为

Point Point::add(const Point& a,const Point& b)

给我(编译错误(

E1086   the object has type qualifiers that are not compatible with the member function "Point::get"
object type is: const Point

注意:float Point::get(const size_t& component)不会修改任何内容。

请帮帮我
谢谢。

函数不能正常工作,因为在这个代码片段中

size_t length {std::max(a._vector.size(),b._vector.size())};
for(size_t i {1};i<=length;++i) {
result._vector.push_back(a.get(i)+b.get(i));
}

即使矢量具有相同的大小,也存在对超出矢量的存储器的访问。

至于错误消息,那么很明显,成员函数get不是常量成员函数,因此可能不会对常量对象调用。

您需要像一样重载或重新声明当前声明的函数

float get(const size_t& component);

至少采用以下方式

float get(const size_t& component) const;

尽管将函数参数声明为具有常量引用类型似乎没有什么意义。你可以像一样声明函数

float get( size_t component ) const;

请注意,最好以以下方式过载功能

float & get( size_t component );
const float & get( size_t component ) const;

最新更新