C ++“表达式必须是可修改的左值”错误

时间:2014-02-15 09:11:03

标签: c++

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++;
    }
}

当我尝试编译此代码时,出现错误: 表达式必须是可修改的左值

我的代码出了什么问题?

2 个答案:

答案 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()的签名,但看起来此方法返回一个不可修改的类型,因此您无法为其指定值,例如intconst int&。 这可以解释为什么以下两行失败:

Maxi[j].GetQuantity() = Maxi[j-1].GetQuantity();
Maxi[j-1].GetQuantity() = c;

您应该更改方法以返回可修改的类型,例如int&,以使其正常工作。