2016-09-27 3 views
0

私はカードトリックに基づいて簡単なアプリケーションを作成しようとしています。そのアプリの一部では、メインデッキと小デッキを交互に分割する必要があります。私はそれを行うための単純なループを書いたが、デッキを呼び出した後もまだ空である。私は以下のコードの部分を貼り付けます。私はどこで間違いをしたのか知っていますか?もちろん、プログラム全体をチェックしたい場合は、hereとすることができます。このメソッドはDeckクラスの "main"インスタンスによって呼び出され、より小さいデッキはそのメソッドのパラメータです。分割後の空のベクトル

void split_deck(Deck one, Deck two, Deck three, Deck four, int time) 
{ 
    Deck* on=&one; 
    Deck* tw=&two; 
    Deck* th=&three; 
    Deck* fo=&four; 
    on->dck.clear(); 
    tw->dck.clear(); 
    th->dck.clear(); 
    fo->dck.clear(); 
    int buff; 

    for (int i = 0; i < 24; i++) 
    { 
     buff = dck[i]; 
     if (i%time == 0) on->dck.push_back(buff); 
     if (i%time == 1) tw->dck.push_back(buff); 
     if (i%time == 2) th->dck.push_back(buff); 
     if (i%time == 3) fo->dck.push_back(buff); 
    } 
} 
+5

すべてのデッキを値渡ししました。つまり、これらのデッキはすべて、機能の終了時に消えるコピーです。また、ポインタとは何ですか? – NathanOliver

+0

@ NathanOliver私の一時的な疑念は、OPは "元のものを修正したい、私はそれにポインタが必要"と思ったが、コピーがすでに起こっていたことを考慮しなかったということだ。 P.S:リファレンスがもっとうまくいったでしょう。 – Borgleader

+0

'' buff = dck [i]; ''に '' dck''とは何ですか? –

答えて

2

ネイサンさんのコメントに展開するには、あなたが参照によってベクトルを渡す必要があります。

void split_deck(Deck& one, Deck& two, Deck& three, Deck& four, int time) 

この方法で、変更が保存され、呼び出し側に表示されます。 ベクトルを(値で)渡す方法は、基本的には関数内のコピーを扱っています。関数外の実際のベクトルは変更されません。

そして、そうですね、これらのポインタを取り除いて(私は彼らがテストのためにそこにいたと仮定します)、関数に渡すベクトルを直接使用してください。

+2

また、必要のないすべてのポインタを取り除くことをお勧めします。 – NathanOliver

関連する問題