[英]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
另外,我不明白为什么Team
从Player
继承,而您立即使用每个类的复数名称创建对象,甚至没有使用过。
您应该定义数组的大小,例如
Player roster[5];
如果在编写代码时不确定数组的大小,则应将其声明为
Player *roster;
在其他地方(最好是在Team类的构造函数中)实际上使它成为一个数组,也许像这样
roster = new Player[k];
,其中k是您要加入团队的人数。
另外,关于这个
class Team: public Player
我认为那不是你想要的。 我不认为您想宣布团队是一名球员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.