【发布时间】:2015-07-05 01:43:10
【问题描述】:
我有一个静态整数变量Game::numPlayers,它是作为用户输入读入的。然后我定义了以下类:
class GridNode
{
private:
/* Members */
static const int nPlayers = Game::numPlayers;
std::vector<Unit> units[nPlayers];
//...
};
这不会编译(“静态数据成员的类内初始化程序不是常量表达式”)。
我显然不能只分配 Game::numPlayers 的数组大小,我也尝试过不初始化它并让构造函数完成工作,但这也没有用。
我不明白我在这里做错了什么以及我还能做些什么来让它按预期工作。
我只是在复制一个值,这与将值 8 复制到 nPlayers 并起作用的 static const int nPlayers = 8 有何不同?
编辑:
为了澄清,我选择了一个向量数组,因为我希望每个节点都有一个快速访问的单元容器,但每个用户/玩家都有一个容器,以便区分每个节点内哪些单元属于哪个玩家(例如,数组的索引 0 = 玩家 1,索引 1 = 玩家 2,索引 2 = 玩家 3,依此类推),否则我将只有一个向量或向量向量。我认为地图可能会起作用,但我认为访问和推入一组向量会更快。
另外,Game::numPlayers 作为用户输入读入,但在一个游戏循环内只读取和分配一次,但如果我关闭/重新启动/玩新游戏,它需要再次读入用户输入并分配一次。
【问题讨论】:
-
当
nPlayers和units仅在用户输入后在运行时而不是在编译时声明/初始化时,您不应该采取一种方法吗? -
只是为了确定,你真的想要一个向量数组吗?或者你真的想要一个向量来保存
nPlayers项目?根据您发布的代码,方法是使用std::vector<std::vector<Unit>>,而不是向量数组。 -
我刚刚做了一个编辑来澄清。
-
@awar 向量向量等同于您的向量数组。在构造时,只需适当调整向量的大小。
-
这如何解决我在编辑中所说的每个向量对每个玩家都不同的问题?具体来说,我的向量数组中的每个索引“i”代表每个玩家“i”的单位向量?