【问题标题】:c++ template class bubble sort operand errorc++模板类冒泡排序操作数错误
【发布时间】:2015-08-04 20:51:43
【问题描述】:

您好,我尝试创建一个模板方法来按对象的 x 坐标对对象向量进行排序。他们用'='符号给我操作数错误

main里面有一些代码,vector point2d已经填充了数据。

vector<Point2D> point2d;
.....
point2d = sortByAscX(point2d, point2d.size());

我的模板.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() 返回一个值。您正在将文字分配给另一个文字。
  • 我尝试更改设置值,但结果为 0

标签: c++ sorting templates


【解决方案1】:

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

【讨论】:

  • 我试过这样做,它产生 0 int temp = a1[y+1].getX(); a1[y+1].setX(a1[y].getX()); a1[y].setX(temp);
  • 你是什么意思它产生了 0。在你的代码中,你看起来像是在尝试交换向量的 2 个元素的 X 值。请更具体。
【解决方案2】:

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

T& getX() { ...}

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多