2017-04-08 12 views
-1

私はdo-whileの中にメニューを作成しました。ユーザーが何をしたいのかを選択すると、メニューが再び表示されます。問題は、私のプログラムがオブジェクトを作成しなければならない選択肢がありますが、メニューが再び表示されたときに、オブジェクトが破棄されることです。do-whileが再び開始されるとオブジェクトが削除されます。どうすればそれを止めることができますか?

これをやめることはできますか?

do 
{ 
    cout << "What would you like to do?(a,b,c or d)" << endl; 
    cout << "a. Add a player to a team. " << endl; 
    cout << "b. View team's stats." << endl; 
    cout << "c. View player's stats." << endl; 
    cout << "d. Exit." << endl; 
    cin >> choice; 
    cout << endl; 

    switch(choice) 
    { 
    case'a': 
     cout << "Choose team(1. maxhtes or 2. diashmoi)"; 
     cin >> omada; 
     addPlayer(omada); 
     break; 
    . 
    . 
    . 
    . 
} 
while(choice != 'd'); 

そして、ここでは...

void addPlayer(int om) 
{ 
if(om ==1) 
{ 
    cout << "Give Player's name,sex,occupation,age and the object he has:" 
<< endl; 
    cin >> name1 >> sex1 >> occupation1 >> age1 >> object1; 
    if(maxhtes.numberOfPlayers==0) 
     Player player0(name1,sex1,occupation1,age1,object1); 
. 
. 
. 

要素を作成する関数です私はあなたが必要のない部分をスキップしました:ながら

はここで行うのです。

ご不便をおかけして申し訳ありません。初めてここに書く。 :)

問題解決済み:オブジェクトのグローバル配列を作成し、そこに新しいオブジェクトを配置します。試してみんなありがとう!

+5

私たちはコードを表示せずにこれを止めることはできません。 –

+1

これは問題ではありませんが、余分なものが必要な場合を除き、 'std :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –

答えて

0

do-whileループの外側にオブジェクトを作成します。このようにして、do-whileが再び始まるときには破壊されません。

あなたのコードを示しても、私たちはさらに手伝ってくれるでしょう。

+0

編集:ありがとう –

0
if(maxhtes.numberOfPlayers==0) 
    Player player0(name1,sex1,occupation1,age1,object1); 

ifステートメントのスコープ内にオブジェクトを作成すると、そのオブジェクトはこのスコープから離れると破棄されます。代わりに、おそらくベクタに保存することをお勧めします:

std::vector<Player> players; // outer scope 

//later.. 
if(maxhtes.numberOfPlayers==0) 
    players.push_back(Player(name1,sex1,occupation1,age1,object1)); 
+0

エラー: 'ベクトル'名前空間 'std'テンプレートの名前を指定していません –

+0

'#を含む ' –

+0

まだオブジェクトが削除されます –

関連する問題