简单运动仿真中的分割故障

时间:2015-12-10 21:37:44

标签: c++ arrays class

我目前正在制作一款基于文字的快速运动模拟器。到目前为止我有两个班,团队和球员。我尝试在一个团队中创建一系列玩家,也就是一个名单。 (不知道该怎么办)。我尝试制作一个播放器,然后将他分配到名册阵列的第一个位置。它编译得很好,但是当我运行程序时,我得到了分段错误'错误,这与我所造成的记忆错误有关,我相信。代码可能不是最好的,如果我的代码不是最优化的,那就很抱歉。如果您对如何解决这个问题有任何建议,请告诉我。感谢。

#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;
 }

2 个答案:

答案 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。