您好我尝试创建一个模板方法,通过x坐标对对象矢量进行排序。他们给了我操作数错误' ='登录
在main内部有一些代码,vector point2d已经填充了数据。
vector<Point2D> point2d;
.....
point2d = sortByAscX(point2d, point2d.size());
我的template.h
template <class T>
vector<T> sortByAscX(vector<T> a1, int size) {
for(int x=0; x<size; x++) {
for(int y=0; y<size-1; y++) {
if(a1[y].getX()<a1[y+1].getX()) {
int temp = a1[y+1].getX();
a1[y+1].setX(a1[y].getX());
a1[y].setX(temp);
}
}
}
return a1;
}
错误
MyTemplates.h:32:20: error: lvalue required as left operand of assignment
a1[y+1].getX() = a1[y].getX();
^
MyTemplates.h:34:18: error: lvalue required as left operand of assignment
a1[y].getX() = temp;
答案 0 :(得分:1)
您收到此错误的原因是您正在调用getX()
函数并尝试将其设置为等于值。您需要拥有或调用setX()
函数并通过它传递您的值。您只能使用get函数获取值。
答案 1 :(得分:1)
正如@NendoTaka正确解释的那样,您正在尝试分配一个右值。如果你想对getter / setter使用相同的函数,那么让它返回一个引用
T& getX() { ...}
虽然现在这个名字有点令人困惑,因为大多数人都希望getter返回一个不可变的对象。
答案 2 :(得分:0)
getX()返回什么?它不能是可赋值,因为这是编译器所抱怨的。如果它返回X值的引用,您可以为其赋值,但如果它是const或返回一个副本,则无法分配给它。