我有一个名为 gridObject 的基类
这是头文件:
#ifndef ITEM_H
#define ITEM_H
class gridObject
{
public:
gridObject();
virtual ~gridObject();
virtual int get_GridID() = 0;
virtual int get_x() = 0;
virtual int get_y() = 0;
virtual int get_direction() = 0;
void set_x(int x);
void set_y(int y);
void set_direction(unsigned int direction);
protected:
private:
int _x;
int _y;
unsigned int _direction;
};
#endif // ITEM_H
我有一个名为 player 的子类
这是类文件中的 get_GridID() 方法:
int player::get_GridID() { return 2; }
还有一个网格类通过 2d 向量跟踪其上的所有对象。在头文件中,有那个向量:
private:
vector<vector<gridObject*> > _position;
以下是分别在特定位置设置和获取对象的方法:
void grid::setGridPosition(int x, int y, gridObject* obj) { _position[y][x] = obj; }
gridObject* grid::getGridPosition(int x, int y) { return _position[y][x]; }
我遇到的问题在这里:
int main()
{
grid * gr = new grid(10, 10);
player p(0, 0, 100);
gridObject * go = &p;
gr->setGridPosition(0, 0, go);
cout << gr->getGridPosition(0, 0)->get_GridID();
return 0;
}
它在以下位置崩溃: cout << gr->getGridPosition(0, 0)->get_GridID();
我已经包含了所有适当的头文件。
编辑:这是网格的构造函数和_position的初始化:
grid::grid(int width, int length)
{
setSize(width, length);
}
void grid::setSize(int width, int length)
{
setLength(length);
setWidth(width);
}
void grid::setLength(int val) { _position.resize(val); }
void grid::setWidth(int val)
{
for(unsigned int i = 0; i < _position.size() - 1; i++)
for(unsigned int j = 0; j < _position.at(i).size() - 1; j++)
_position.at(i).resize(val);
}