Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 类中的指针问题_Qt_Class_Pointers - Fatal编程技术网

Qt 类中的指针问题

Qt 类中的指针问题,qt,class,pointers,Qt,Class,Pointers,我有两个类:board.h和scene.h。当我像这样运行程序时,一切正常: scene.cpp scene::scene() { basescene=new QGraphicsScene; additem(); } void scene::additem() { board *_board=new board; QPixmap boarditem (":/images/board.png"); _board->setPixmap(boarditem);

我有两个类:board.h和scene.h。当我像这样运行程序时,一切正常: scene.cpp

scene::scene()
{
  basescene=new QGraphicsScene;
  additem();

}

void scene::additem()
{
    board *_board=new board;
    QPixmap boarditem (":/images/board.png");
    _board->setPixmap(boarditem);
    basescene->addItem(_board);
}
场景h

class scene:public QGraphicsScene
{
public:
    scene();
    QGraphicsScene *basescene;
    void additem();
};
class scene:public QGraphicsScene
{
public:
    scene();
    QGraphicsScene *basescene;

};
董事会

class board:public QGraphicsPixmapItem
{
public:
    board();
};
class board:public QGraphicsPixmapItem,public scene
{
public:
    board();
    void additem();
    board *_board;
};
board.cpp

board::board()
{

}  
但当我这样运行它时:

场景h

class scene:public QGraphicsScene
{
public:
    scene();
    QGraphicsScene *basescene;
    void additem();
};
class scene:public QGraphicsScene
{
public:
    scene();
    QGraphicsScene *basescene;

};
scene.cpp

scene::scene()
{
  basescene=new QGraphicsScene;
  additem();

}

void scene::additem()
{
    board *_board=new board;
    QPixmap boarditem (":/images/board.png");
    _board->setPixmap(boarditem);
    basescene->addItem(_board);
}
scene::scene()
{
  basescene=new QGraphicsScene;
  board _board;

}
董事会

class board:public QGraphicsPixmapItem
{
public:
    board();
};
class board:public QGraphicsPixmapItem,public scene
{
public:
    board();
    void additem();
    board *_board;
};
board.cpp

board::board()
{
   additem();
}

void board::additem()
{
board *_board=new board;
QPixmap boarditem (":/images/board.png");
_board->setPixmap(boarditem);
basescene->addItem(_board);
}

程序崩溃,调试器说错误在场景类中,代码有一个段错误。我在谷歌上搜索,它说是指针问题。。。我是C++新手,调试程序,对我的英语不好感到抱歉。

< p>你继承了<代码>板> <代码> > <代码>场景<代码>。 创建
board
实例时,执行
场景
构造函数,然后执行
board
构造函数。 但是在
场景中
构造函数中,您创建了board的一个新实例。而这个新实例的
scene
构造函数会创建另一个board实例。依此类推,直到无穷远

如果您需要有关构造函数调用的更多信息:

编辑: 事实上,如果它已经克服了这个问题,并且走得更远,它将到达
board
构造函数,该构造函数调用
addItem
,从而创建另一个
board
实例。在这个新实例的构造函数中,将再次调用
addItem
,它将一次又一次地尝试创建另一个
board


因此,您有两个递归构造函数调用。

代码中有一团乱麻。您可以完全删除工作正常的代码,但放入失败的完整代码。例如,
chessscene
的构造函数在哪里?我编辑了这篇文章,这不是问题所在。。。我真的很累了…没有在帖子中看到这个问题,对此我很抱歉。