我有一个指向名为cPlayer的类的指针数组。
编译器:Visual C ++ 2010 Express
初始化
cPlayer* players[MAX_PLAYERS];
Max_Players的定义值为10。 在标题中名为“OnlineData”的类中定义。
检查
if (players[a]){
// some code here
}
我曾经尝试过,它仍然会在这里找到一些代码
玩家的删除方式如下:
players[player->id]=0;
delete player;
问题
我想检查播放器数组中位置a的项是否有值。我正在使用它来获取播放器列表(碎片整理)
在添加内容时,数组的工作规范是正常的,直到我尝试执行上述操作
答案 0 :(得分:9)
初始化指向空指针的指针,可以这样做:
cPlayer* players[MAX_PLAYERS] = {};
答案 1 :(得分:7)
要初始化您将使用的全局或本地数组:
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::fill
或std::fill_n
:
std::fill_n(players, MAX_PLAYERS, NULL);
答案 2 :(得分:3)
初始化数组: - cPlayer * players [MAX_PLAYERS] = {};
答案 3 :(得分:1)
将数组的所有值初始化为NULL(在<cstdlib>
处找到)。然后,当您想要为数组的其中一个位置指定值时,请写入:players[i]=new cPlayer(...)
。要检查排名a
是否为空,只需检查players[a]==NULL
。
答案 4 :(得分:0)
使用
std::fill_n(players, 10, 0)
将所有成员初始化为0 ..