2014-02-15 47 views
0
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++; 
    } 
} 

当我尝试编译此代码我得到一个错误: 表达必须修改的左值C++“表达必须修改的左值”错误

这有什么错我的代码?

+2

在哪一行? 'Maximumuas'的定义是什么? –

+0

检查这个Maxi [j] .GetQuantity()= .. – qwr

+0

你的代码有什么问题?那么,当编译器期望一个表达式不是一个可修改的左值时,doncha认为呢? – vaxquis

回答

3

我的猜测是,Maximumas::GetQuantity()收益率的值或const参考,所以你不能做这样的事情:

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

你需要返回一个参考的过载。假设它返回int,你需要像

int& GetQuantity(); 
const int& GetQuantity() const; 

其中const过载可以让你调用成员上const实例或通过const引用。

请注意,除非这是一个练习,否则使用std::sort和适当的谓词会更简单。

1

我需要确认Maximumas::GetQuantity()的签名,但看起来此方法返回一个不可修改的类型,因此您无法为其指定值,例如, intconst int&。 这可以解释为什么两个以下行失败:

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

你应该改变你的方法返回一个可修改的类型,比如int&,使其工作。

相关问题