3

cPlayerというクラスへのポインタの配列があります。

コンパイラ:Visual C ++ 2010 Express

初期化

cPlayer* players[MAX_PLAYERS];

Max_Playersは、ヘッダーの「OnlineData」というクラスで定義された10の定義値です。

チェック中

if (players[a]){
   // some code here
}

私が試したことは何でも、//ここにいくつかのコードがあります

プレイヤーは次のように削除されます:

players[player->id]=0;
delete player;

質問

プレーヤー配列の位置aにあるアイテムに値があるかどうかを確認したいと思います。プレイヤーリストを再利用するために使用しています(デフラグ)

上記のことを実行しようとするまで、配列はコンテンツの追加で正常に機能します

4

5 に答える 5

10

nullポインターへのポインターを初期化します。これは、次のように実行できます。

cPlayer* players[MAX_PLAYERS] = {};
于 2012-10-19T18:13:50.737 に答える
8

グローバルまたはローカル配列を初期化するには、次を使用します。

cPlayer* players[MAX_PLAYERS] = {};

ただし、配列はクラスメンバーであるため、これを行うことはできません(C ++ 11がクラス内初期化を導入するまで、VS2010はこの機能をサポートしていません)。代わりに、コンストラクター本体(またはinit関数など)で各メンバーを個別に初期化するコードを作成する必要があります。

struct S {
    cPlayer *players[MAX_PLAYERS];

    S() {
        for (int i=0; i<MAX_PLAYERS; ++i) {
            players[i] = NULL;
        }
    }
};

または、明示的なループを使用するよりも、または:<algorithm>などのから何かを使用することをお勧めします。std::fillstd::fill_n

std::fill_n(players, MAX_PLAYERS, NULL);
于 2012-10-19T18:14:07.287 に答える
3

配列を初期化します。-cPlayer*players[MAX_PLAYERS] = {};

于 2012-10-19T18:14:42.777 に答える
1

配列のすべての値を NULL に初期化します ( にあります<cstdlib>)。次に、配列の位置の 1 つに値を割り当てたい場合は、次のように記述しますplayers[i]=new cPlayer(...)。ポジションaが空かどうかを確認するには、単純に if を確認しますplayers[a]==NULL

于 2012-10-19T18:28:29.517 に答える
0

使用する

std::fill_n(players, 10, 0)

すべてのメンバーを 0 に初期化します。

于 2012-10-19T18:28:12.023 に答える