void Sort(Maximumas Maxi[], int ind){
int m = 0; // begin
bool bk = true;
while(bk){
bk = false;
for(int j=ind-1; j>m; j--){
if(Maxi[j].GetQuantity() > Maxi[j-1].GetQuantity()){
bk = true;
int c = Maxi[j].GetQuantity();
Maxi[j].GetQuantity() = Maxi[j-1].GetQuantity();
Maxi[j-1].GetQuantity() = c;
}
}
m++;
}
}
当我尝试编译此代码时,出现错误: 表达式必须是可修改的左值
我的代码出了什么问题?
答案 0 :(得分:3)
我的猜测是Maximumas::GetQuantity()
按值或const
引用返回,所以你不能做这样的事情:
Maxi[j-1].GetQuantity() = c;
您需要一个返回引用的重载。假设它返回int
,则需要类似
int& GetQuantity();
const int& GetQuantity() const;
const
重载允许您在const
个实例上或通过const
引用调用该成员。
请注意,除非这是一个练习,否则将std::sort
与合适的谓词一起使用会更简单。
答案 1 :(得分:1)
我需要确保Maximumas::GetQuantity()
的签名,但看起来此方法返回一个不可修改的类型,因此您无法为其指定值,例如int
或const int&
。
这可以解释为什么以下两行失败:
Maxi[j].GetQuantity() = Maxi[j-1].GetQuantity();
Maxi[j-1].GetQuantity() = c;
您应该更改方法以返回可修改的类型,例如int&
,以使其正常工作。