简单运动模拟中的分段错误

Segmentation Fault in simple Sports Simulation

本文关键字:分段 错误 运动 模拟 简单      更新时间:2023-10-16

我目前正在制作一个基于文本的快速运动模拟器。到目前为止,我有两个班,团队和球员。我试着在一个团队中制作一系列球员,也就是花名册。(不知道该怎么做)。我试着培养一名球员,然后把他安排在名单的第一位。它编译得很好,但当我运行程序时,我会出现"分段错误",我相信这与我在内存中造成的错误有关。代码可能不是最好的,所以很抱歉,如果我的代码不是最优化的。如果你对我如何解决这个问题有任何建议,请告诉我。谢谢

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

您不能期望这样:

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,并且您立即创建具有每个类的复数名称的对象,这些名称甚至都没有使用。

您应该定义数组的大小,例如

Player roster[5];

如果在编写代码时不确定数组的大小,你应该把它申报为

Player *roster;

和其他地方(最好是在类Team的构造函数中)把它做成一个阵列,也许像这个

roster = new Player[k];

,其中k是你想要加入球队的球员数量。

另外,关于这个

 class Team: public Player

我不认为这是你想要的。我认为你不想宣布球队是一名球员。