2014-02-15 3 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

На какой линии? Что такое определение «Максимум»? –

+0

проверить это Maxi [j] .GetQuantity() = .. – qwr

+0

Что не так с вашим кодом? Ну, вы использовали выражение, не являющееся изменчивым значением, когда ожидалось компилятором, подумал Донча? – 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(), но похоже, что этот метод возвращает немодифицируемый тип, так что вы не можете присвоить ему значение, например. int или const int&. Это объясняет, почему бы две следующие линии вышли из строя:

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

Вы должны изменить способ, чтобы вернуть изменяемый тип, как int&, чтобы заставить его работать.

Смежные вопросы