【发布时间】:2013-12-05 21:37:17
【问题描述】:
我在处理多态性时遇到了一些代码问题。
基本上我要做一个生命游戏,因此有一个驱动程序,我在其中创建有机体指针网格(实际动物类的超类,在本例中为 Ant)。
在我的驱动程序中,我使用以下代码在有机体指针数组中创建了一个新 Ant:
[DRIVER]
Ant *ant = new Ant(&world, GRID_HEIGHT, GRID_WIDTH);
world.setOrganism(ant,4,4);
在这里,我创建了一个指向 Ant 的指针,并将其放入世界中。这里是 setOrgamism 函数:
[World]
void World::setOrganism(Organism *organism, int x, int y)
{ grid[x][y] = organism; }
因此,从驱动程序调用此代码时有效。我可以在任何地方使用它制作新蚂蚁,没问题。
但是,当我尝试在 Ant 的 spawn 函数中运行它时,我收到了访问冲突错误,并且我的程序在执行 setOrganism 时崩溃了。
这是我的 Ant 类中用于 spawn 函数的代码:
[Ant]
void Ant::spawn(int spawnX, int spawnY)
{
Ant *newAnt = new Ant(world, GRID_HEIGHT, GRID_WIDTH);
newAnt->setPosition(spawnX,spawnY);
world->setOrganism(newAnt, spawnX, spawnY);
}
我们非常感谢任何和所有的帮助!
编辑:
[World.cpp]
#include "World.h"
#include "Ant.h"
#include "Lion.h"
using namespace std;
World::~World(void)
{
}
World::World(void)
{
for(int y = 0; y < GRID_HEIGHT; y++)
{
for(int x = 0; x < GRID_WIDTH; x++)
{
grid[x][y] = NULL;
}
}
}
Organism* World::getOrganism(int x, int y)
{
return grid[x][y];
}
void World::setOrganism(Organism *organism, int x, int y)
{
grid[x][y] = organism;
organism->setPosition(x,y);
}
_
[Ant]
#include "Ant.h"
using namespace std;
Ant::~Ant(void)
{
}
Ant::Ant(void)
{
}
Ant::Ant(World *world, int width, int height)
{
srand(time(NULL));
this->width = width;
this->height = height;
}
void Ant::spawn(int spawnX, int spawnY)
{
Ant *newAnt = new Ant(world, GRID_HEIGHT, GRID_WIDTH);
newAnt->setPosition(spawnX,spawnY);
world->setOrganism(newAnt, spawnX, spawnY);
}
_
[Driver]
#include "Organism.h"
#include "Ant.h"
#include "Lion.h"
#include "World.h"
using namespace std;
int main()
{
World *world = new World();
//This works
Ant *ant = new Ant(world, GRID_HEIGHT, GRID_WIDTH);
world->setOrganism(ant,4,4);
//This does not
ant->spawn(6,6);
}
如果您需要更多信息,请询问!
【问题讨论】:
-
分享
Ant和Organism的类定义。 -
你能提供一个SSCCE吗?
-
您向我们展示的代码中该错误的唯一可能来源是
world可能未初始化或NULL或spawnX/spawnY超出范围。跨度> -
继续@Casey 的评论:spawnX/spawnY 可能超出范围,因为您没有在 [DRIVER] 中创建的蚂蚁上调用
SetPosition,而 @987654335 @function 表明您的实现需要这样做。 -
更新了我希望是 SSCCE 的内容——话虽如此,有问题的代码似乎与 World 类的 setOrganism 相关。 setPosition 只是 Ant 中的 a 属性,所以它知道它在哪里,在这种情况下,我只是硬编码了用于测试的值,所以这不应该成为问题
标签: c++ pointers inheritance polymorphism