gpt4 book ai didi

c++ - 字符串复制构造函数的段错误

转载 作者:行者123 更新时间:2023-11-28 00:39:06 24 4
gpt4 key购买 nike

我在使用复制构造函数创建 C++ 字符串的那一行遇到段错误。我已经查看了一些类似的问题,但它们都是由于传递了错误的 C++ 字符串对象所致。我只是传递一个原始字符串,所以我不确定我的问题是什么。我将粘贴相关的代码片段(它取自几个不同的文件,因此看起来可能有点困惑)。段错误发生在 Species 类默认构造函数的第 4 行。

Species::Species(string _type) {
program_length = 0;
cout << _type << " 1\n";
cout << type << " 2\n";
type = string(_type);
}

Grid::Grid(int _width, int _height) {
*wall = Species("wall");
*empty = Species("empty");
turn_number = 0;
width = _width;
height = _height;
for(int a= 0; a < 100; a++)
for(int b = 0; b< 100; b++) {
Creature empty_creature = Creature(*empty,a,b,NORTH,this);
(Grid::map)[a][b] = empty_creature;
}
}

int main() {
Grid world = Grid(8,8);
}

class Grid {
protected:
Creature map[100][100];
int width,height;
int turn_number;
Species *empty;
Species *wall;
public:
Grid();
Grid(int _width, int _height);
void addCreature(Species &_species, int x, int y, Direction orientation);
void addWall(int x, int y);
void takeTurn();
void infect(int x, int y, Direction orientation, Species &_species);
void hop(int x, int y, Direction orientation);
bool ifWall(int x, int y, Direction orientation);
bool ifEnemy(int x, int y, Direction orientation, Species &_species);
bool ifEmpty(int x, int y, Direction orientation);
void print();
};

class Species {
protected:
int program_length;
string program[100];
string type;
public:
species(string _type);
void addInstruction(string instruction);
bool isWall();
bool isEmpty();
bool isEnemy(Species _enemy);
string instructionAt(int index);
string getType();
};

这是我从墙上移除指针并清空后更新的代码。我现在遇到一个奇怪的错误(“错误:场墙不是 Grid 的成员”):

Grid::Grid(int _width, int _height) {
(Grid::wall) = Species("wall");
(Grid::empty) = Species("empty");
cout << (*wall).getType() << "\n";
turn_number = 0;
width = _width;
height = _height;
for(int a= 0; a < 100; a++)
for(int b = 0; b< 100; b++) {
Creature empty_creature = Creature(Grid::empty,a,b,NORTH,this);
(Grid::map)[a][b] = empty_creature;
}
}

class Grid {
protected:
Creature map[100][100];
int width,height;
int turn_number;
Species empty;
Species wall;
public:
Grid();
Grid(int _width, int _height);
void addCreature(Species &_species, int x, int y, Direction orientation);
void addWall(int x, int y);
void takeTurn();
void infect(int x, int y, Direction orientation, Species &_species);
void hop(int x, int y, Direction orientation);
bool ifWall(int x, int y, Direction orientation);
bool ifEnemy(int x, int y, Direction orientation, Species &_species);
bool ifEmpty(int x, int y, Direction orientation);
void print();
};

最佳答案

问题的最可能原因是您在未初始化的情况下取消引用的 Species 指针数据成员:

Grid::Grid(int _width, int _height) {
*wall = Species("wall"); // wall not initialized. What does it point to?
*empty = Species("empty"); // likewise for empty

这引出了一个问题:无论如何你都需要它们作为指针吗? (提示:很可能不会)

当不使用指针时,您可以轻松地在构造函数的初始化列表中初始化数据成员:

Grid::Grid(int _width, int _height) 
: width(_width), height(_height), turn_number(0), wall("wall"), empty("empty")
{
....
}

关于c++ - 字符串复制构造函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19758474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com