我想做一个国际象棋游戏,我刚开始学习C++,我有一个basedice类,我从它派生了我的骰子。该程序崩溃后,我想访问我的作品在gamepos数组中的一件。在knight.cpp中的mousepressevent函数崩溃发生。也请关于我的英语。C++程序在给二维数组指针赋值后崩溃
我的代码是:
basedice.h
class basedice:public QGraphicsPixmapItem
{
public:
basedice();
enum KIND {Kinght,Rook,Pawn,Bishop,Queen,King};
KIND kind;
enum COLOR {white,black};
COLOR color;
void setposition();
basedice *gamepos[8][8];
};
basedice.cpp
basedice::basedice()
{
}
void basedice::setposition()
{
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
gamepos[i][j]=NULL;
}
}
}
board.h
class board:public basedice
{
public:
board();
void additem(QGraphicsScene *basescene);
board *_board;
};
board.cpp
board::board()
{
setZValue(0);
}
void board::additem(QGraphicsScene *basescene)
{
setposition();
_board= new board;
QPixmap boarditem (":/images/board.png");
_board->setPixmap(boarditem);
_board->setPos(0,0);
basescene->addItem(_board);
}
knight.h
class knight:public basedice
{
public:
knight();
void additem(QGraphicsScene *basescene);
QVector <knight *>_blackknight;
QVector <knight *> _whiteknight;
void mousePressEvent(QGraphicsSceneMouseEvent *event);
}
knight.cpp
knight::knight()
{
setFlag(ItemIsMovable);
setZValue(1);
}
void knight::additem(QGraphicsScene *basescene)
{
_blackknight.resize(2);
_whiteknight.resize(2);
for (int i=0;i<2;i++)
{
_blackknight[i]=new knight;
_whiteknight[i]=new knight;
}
QPixmap bknight(":/images/basb.png");
for (int i=0;i<2;i++)
{
_blackknight[i]->setPixmap(bknight);
_blackknight[i]->setPos(140+i*5*140,0);
_blackknight[i]->color=black;
_blackknight[i]->kind=Kinght;
gamepos[1+i*5][0]=(_blackknight[i]);
basescene->addItem(_blackknight[i]);
}
QPixmap wknight(":/images/wasb.png");
for (int i=0;i<2;i++)
{
_whiteknight[i]->setPixmap(wknight);
_whiteknight[i]->setPos(140+i*5*140,980);
_whiteknight[i]->color=white;
_whiteknight[i]->kind=Kinght;
gamepos[1+i*5][7]=(_whiteknight[i]);
basescene->addItem(_whiteknight[i]);
}
}
void knight::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
qDebug()<<gamepos[i][j];//this cause the program to crash
}
}
}
而且chessscene只是为了显示我怎么称呼他们: chessscene.h
class chessscene
{
public:
chessscene();
QGraphicsScene *basescene;
};
chessscene。 cpp
chessscene::chessscene()
{
basescene=new QGraphicsScene;
board _board;
knight _knight;
_board.additem(basescene);
_knight.additem(basescene);
}
究竟是哪条线坠毁? – MrEricSir 2014-09-03 23:01:27
在knight.cpp ..中mousepressevent函数'qDebug()<< gamepos [i] [j]' – behrooz 2014-09-03 23:46:42
我的调试器表示它是从指针的内部它。 – behrooz 2014-09-03 23:48:10