c++模板类冒泡排序操作数错误
c++ template class bubble sort operand error
嗨,我试图创建一个模板方法来排序向量的对象的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或返回副本,则不能对其进行赋值。
相关文章:
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 错误 C2679 二进制"<<":未找到采用类型为 'T' 的右侧操作数的运算符
- 错误:'operator>'不匹配(操作数类型为 'Student' 和 'Student'
- 如何摆脱逗号运算符的这个错误右操作数没有效果( wunsued 值)?
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 使用堆栈编译错误的 C++ 反向行没有运算符匹配操作数
- 当我尝试构建此程序时,出现此错误:需要左键作为赋值的左操作数
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- C++ 运算符不匹配操作数错误
- c++的cout操作数错误,类型错误
- 使用cin时,字符串上的右操作数错误
- OpenCV无效操作数错误
- 需要lvalue作为增量操作数错误
- C++无效操作数错误
- c++模板类冒泡排序操作数错误