所以基本上我正在制作Monoply的简短版本。我需要创建一个结构的向量来包含用户输入的多个玩家的所有信息,其中还包含每个玩家拥有的属性。我有一个功能来创建x数量的玩家,并为每个玩家分配起始现金。但是,当我编译此代码时,我收到错误libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector
。我究竟做错了什么?谢谢!
void createPlayers(Board b, Rules r, int players)
{
for(int i = 0; i < players; i++)
{
b.listOfPlayers.at(i).cash = r.startCash;
}
for(int i = 0; i < players; i++)
{
cout << b.listOfPlayers.at(0).cash;
}
}
typedef struct Player_Struct
{
int cash;
vector<char> propertiesOwned;
} Player;
typedef struct Board_Struct
{
vector<char>listOfProperties;
vector<Player_Struct> listOfPlayers;
} Board;
这是解决问题的好方法吗?玩家的数量取决于用户,我无法在struct初始化中初始化一定数量的player_structs。我的想法是创建一个所有玩家的矢量列表,然后能够从矢量列表中的每个玩家中提取信息。即使我的代码非常糟糕,我至少在逻辑上是正确的吗?我还是刚接触C的C ++新手。
答案 0 :(得分:0)
发生错误时,您不显示任何输出,也不显示变量值。
您可以引用向量中的元素与正常数组中的元素相同,例如b.listOfPlayers[i]
。
最好指定库,最好写std::vector<int>
而不是vector<int>
。
您无需传递players
,只需在向量.size()
上使用内置函数,例如b.listOfPlayers.size()
。
您不需要在结构上指定typedef
。
总结一下人们所说的话还有一点点。也许不是你想要的答案,而是你需要的答案。
答案 1 :(得分:-1)
我可以看到来自C的你会选择使用Structs来编写这个项目,但你正在使用C ++,你可以使用OOP概念。
通过将结构更改为类来开始,这样您就可以使用继承,封装,抽象和多态概念。看看this。将Structs
保留为POD,并将Classes
用于其他所有内容
如果您正在学习C ++,使用C ++编写代码并使用其功能,请避免将C ++用作C类。
回到原来的问题;
如果要添加到矢量,请使用push_back
。在您的情况下,listOfPlayers
看起来是空的或i
超出界限,因此当您根据文档调用.at
时;
如果它大于或等于矢量大小,则抛出out_of_range类型的异常。
要解决此问题,请使用push_back
将项添加到向量中,并确保i
位于向量的范围内。
我建议你阅读this