c++模板类冒泡排序操作数错误

c++ template class bubble sort operand error

本文关键字:操作数 错误 冒泡排序 c++      更新时间:2023-10-16

嗨,我试图创建一个模板方法来排序向量的对象的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;

您得到此错误的原因是您正在调用getX()函数并试图将其设置为等于一个值。您需要拥有或调用setX()函数并通过它传递您的值。您只能通过get函数获取值

正如@NendoTaka正确解释的那样,您正在尝试分配给右值。如果你想对getter/setter使用相同的函数,那么让它返回一个引用

T& getX() { ...}

尽管现在这个名字会让人有点困惑,因为大多数人都希望getter返回一个不可变的对象

getX()返回什么?它不能是一个可赋值,因为这是编译器所抱怨的。如果它返回X值的引用,则可以对其进行赋值,但如果它是const或返回副本,则不能对其进行赋值。