2017-05-20 13 views
-1

whileループで別の関数を呼び出してオブジェクトのベクトルを反復しようとすると、問題は発生します(必ずしもエラーはありませんが、コンソールは空白になります)。別の関数を使用してオブジェクトのベクトルで関数を呼び出す

基本的にfightEnemyはwhileループで実行すると表示されませんが、enemyComboCheck関数でwhileループで実行しないと表示されません。

マイコード:

int fightEnemy(Player &player, Enemy &enemy) { 
    //just for example 
    cout << player.name << endl; 
    cout << enemy.name << endl; 
    return 0; 
} 

int enemyComboCheck(int id1, int id2, vector<Player> &allPlayers, vector<Enemy> &allEnemies){ 
    int iteratorForPlayer = 0; 
    int iteratorForEnemy = 0; 
    id1 = id1 - 1; 
    id2 = id2 - 1; 

    while(true){ 
     if(id1 == allPlayers[iteratorForPlayer].id && id2 == allEnemies[iteratorForEnemy].eid) fightEnemy(allPlayers[iteratorForPlayer], allEnemies[iteratorForEnemy]); break; 
     if(iteratorForEnemy <= 18) iteratorForEnemy++; 
     if(iteratorForPlayer <= 5) iteratorForPlayer++; 
    } 
    return 0; 
} 

int main(){ 
    vector<Player> allPlayers; //pretend this has 5 players 
    vector<Enemy> allEnemies; //pretend this has 18 enemies 
    enemyComboCheck(uid1, uid2, allPlayers, allEnemies); //this won't print out fightEnemy while in the while loop 
    return 0; 
} 
+0

私はあなたの編集をロールバックしました。質問を変更し、現在の回答(これも私のものです)を無効にしたためです。サイトに適した別の質問がある場合は、別の質問としてそれを聞くことができます。しかし、デバッガでコードをステップ実行する必要があるように思えます。 –

+0

デバッガの使い方がわかりません:/ –

+0

'if'文が決して満たされない場合、ループは永遠に回転し続けます。あなたのループでは、 'id1、id2、allPlayers [iteratorForPlayer] .id、allEnemies [iteratorForEnemy] .id'の値を出力し、各繰り返しをループが入力を待つ(' cin.get() ')ようにすることができます値が何であるか参照してください。 –

答えて

0

あなたはif文の後に隠されたbreakを持っています。 ifブロックには含まれていないため、最初の繰り返し時に常にループを終了します。

+0

その点をありがとう、id1またはid2が1を超えたときにフリーズアップするようになりましたが、少し質問を編集しました。 –

+0

@PeteMcGreetetheIIIIまだ壊れている –

+0

@ manni66彼は私の改訂を元に戻した –

関連する問題