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;