我目前正在制作一款基于文字的快速运动模拟器。到目前为止我有两个班,团队和球员。我尝试在一个团队中创建一系列玩家,也就是一个名单。 (不知道该怎么办)。我尝试制作一个播放器,然后将他分配到名册阵列的第一个位置。它编译得很好,但是当我运行程序时,我得到了分段错误'错误,这与我所造成的记忆错误有关,我相信。代码可能不是最好的,如果我的代码不是最优化的,那就很抱歉。如果您对如何解决这个问题有任何建议,请告诉我。感谢。
#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
using namespace std;
class Player {
public:
string playerName;
string playerAge;
string position;
} players;
class Team: public Player {
public:
string name;
Player roster[];
} teams;
void teamCrocovia() {
Team crocovia;
crocovia.name = "ComArch Crocovia";
Player cro1;
crocovia.roster[0] = cro1; // This is the segmentation fault.
}
int main() {
teamCrocovia();
return 0;
}
答案 0 :(得分:3)
你不能指望这个:
Player roster[]; // this is a zero-sized array
是一个可变大小的数组(在C ++中没有这样的东西)并添加如下元素:
crocovia.roster[0] // out of bounds access
改为使用std::vector
:
std::vector<Player> roster; // in Team
crocovia.roster.push_back(cro1); // add player
另外,我不明白为什么Team
继承自Player
并且您立即创建了具有每个类的多个名称的对象,甚至没有使用过。
答案 1 :(得分:3)
您应该定义数组的大小,例如
Player roster[5];
如果您在编写代码时无法确定数组的大小, 你应该把它声明为
Player *roster;
和其他地方(最好是在Team类的构造函数中)实际上 把它变成一个数组,也许就像这样
roster = new Player[k];
,其中k是团队中您想要的玩家数量。
另外,关于这个
class Team: public Player
我认为这不是你想要的。 我不认为你想宣布Team IS A Player。