2016-05-18 2 views
0

Я не знаю, когда дело доходит до ООП, поэтому я, вероятно, ошибаюсь, но я не могу найти его, вот часть кода, который не срабатывает:Почему не сохраняются изменения в переменной?

Файл утилиты - это всего лишь файл с сообщениями об ошибках

В main.cc:

int main(){ 

Ship imperialDestroyer(IMPERIAL); 
Ship rebelShip(REBEL); 

cout<<imperialDestroyer<<endl; //this just print the ship, you can ignore it 
cout<<rebelShip<<endl; 

imperialDestroyer.improveFighter(); //this is what fails 

cout<<imperialDestroyer<<endl; 
} 

В Ship.cc:

bool Ship::improveFighter(){ 

int num, cantidad, cost; 
char option, respuesta; 
bool improved = false; 

cout << "Select fighter number: "; 
cin >> num; 
num = num-1; 

if(num > this->fleet.getNumFighters() || num < 0) 
    Util::error(WRONG_NUMBER); 

else{ 
    cout << "What to improve (v/a/s)?"; 
    cin>>option; 

if(option!='v' && option!='a' && option!='s') 
    Util::error(UNKNOWN_OPTION); 

else{ 
    cout << "Amount: "; 
    cin >> cantidad; 

    if(option == 'v') 
cost = 2 * cantidad; 

    else if(option == 'a') 
cost = 3 * cantidad; 

    else if(option == 's') 
cost = (cantidad + 1)/2; 

    if(this->fleet.getCredits() < cost) 
Util::error(NO_FUNDS); 

    else{ 
cout << "That will cost you "<< cost <<" credits. Confirm? (y/n)"; 
cin >> respuesta; 

if(respuesta == 'y'){ 
    this->fleet.improveFighter(num, option, cantidad, cost); 
    improved = true; 
} 

    } 
} 
} 

return improved; 
} 

В Fleet.cc:

void Fleet::improveFighter(int nf, char feature, int amount, int cost){ 

    if(feature == 'v'){ 
    getFighter(nf).increaseVelocity(amount); 
    } 

    else if(feature == 'a'){ 
    getFighter(nf).increaseAttack(amount); 
    } 

    else if(feature == 's'){ 
    getFighter(nf).increaseShield(amount); 
    } 
} 

}

В Fighter.cc:

Fighter Fleet::getFighter(int n) const{ 

    return fighters[n]; 
} 

void Fleet::improveFighter(int nf, char feature, int amount, int cost){ 

    if(feature == 'v'){ 
    getFighter(nf).increaseVelocity(amount); 
    } 

    else if(feature == 'a'){ 
    getFighter(nf).increaseAttack(amount); 
    } 

    else if(feature == 's'){ 
    getFighter(nf).increaseShield(amount); 
    } 
} 

По какой-то причине, когда я пытаюсь улучшить некоторые функции, он не будет сохранен.

+0

Не могли бы вы исправить ваши отступы, пожалуйста? Представьте свой [MCVE]. –

+0

'cout << imperialDestroyer << endl;' - Это даже компиляция? Если да, укажите соответствующий код. – Ajay

+0

@ Аджай: Почему это не так? И как это имеет отношение к вопросу? –

ответ

1
Fighter Fleet::getFighter(int n) const 
{ 
    return fighters[n]; 
} 

Это возвращает копию в Fighter в положении n. Изменение копии не повлияет на оригинал.

Вы можете вернуть Fighter& (т.е. ссылка), но так как ваша функция const, что не будет работать. Вам нужно будет решить, что вы хотите, чтобы эта функция была be.

+1

Хорошо, я не должен был использовать модуль getFighter, потому что подсказка «Модификация копии не повлияет на оригинал», которая помогла мне понять, что мне пришлось использовать векторные истребители, было довольно просто, но я не мог " видеть это. – Sefean

+0

@Sefean: Отлично :) –

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