3

我有一个指向名为 cPlayer 的类的指针数组。

编译器:Visual C++ 2010 Express

在里面

cPlayer* players[MAX_PLAYERS];

Max_Players 是一个定义值 10。定义在一个名为“OnlineData”的类中,在一个标题中。

检查

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

无论我尝试过什么,它仍然可以通过 //some code here

玩家被删除是这样的:

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

问题

我想检查 player 数组中位置 a 的项目是否有值。我正在使用它来处理播放器列表(碎片整理)

该数组在添加内容时正常工作,直到我尝试执行上述操作

4

5 回答 5

10

将指针初始化为空指针,可以这样完成:

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::fillor std::fill_n

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

初始化数组:- cPlayer* player[MAX_PLAYERS] = {};

于 2012-10-19T18:14:42.777 回答
1

将数组的所有值初始化为 NULL(在 处找到<cstdlib>)。然后,当您想为数组的某个位置分配一个值时,请编写: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 回答