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

时间:2015-05-22 18:16:14

标签: c++ sorting templates

您好我尝试创建一个模板方法,通过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;

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

T& getX() { ...}

虽然现在这个名字有点令人困惑,因为大多数人都希望getter返回一个不可变的对象。

答案 2 :(得分:0)

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