繁体   English   中英

简单运动仿真中的分割错误

[英]Segmentation Fault in simple Sports Simulation

我目前正在制作一个快速的基于文本的小型体育模拟器。 到目前为止,我有2个班级,分别是Team和Player。 我试图在一个团队(又名册)中安排一组球员。 (不知道如何做否则)。 我试着建立一个球员,然后将他分配到花名册阵列中的第一位。 它可以很好地编译,但是我运行该程序时会遇到“分段错误”错误,我认为这与我引起的内存错误有关。 该代码可能不是最好的,如果我的代码不是最优化的,请对不起。 如果您对如何解决此问题有任何建议,请告诉我。 谢谢。

#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

另外,我不明白为什么TeamPlayer继承,而您立即使用每个类的复数名称创建对象,甚至没有使用过。

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

Player roster[5];

如果在编写代码时不确定数组的大小,则应将其声明为

Player *roster;

在其他地方(最好是在Team类的构造函数中)实际上使它成为一个数组,也许像这样

roster = new Player[k];

,其中k是您要加入团队的人数。

另外,关于这个

 class Team: public Player

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM