我#highscore文件包含在我的标头中。现在,我在submarine.cpp中创建了它的对象,但是无论如何我都无法访问它。当我尝试时,写“高分”。为了向我展示其某些方法,它什么也没有显示,并告诉我之前声明的变量尚未使用。
Submarine::Submarine(QGraphicsItem* parent):QObject (),
QGraphicsPixmapItem (parent)
{
Highscore *highscore = new Highscore;
QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(die()));
timer->start(50);
}
void Submarine::doSomething()
{
highscore->increase(); (HERE)
如何在Submarine类的方法中获得高分?我必须在头文件中做更多的事情吗?
答案 0 :(得分:0)
构造函数中发生内存泄漏:
Submarine::Submarine(QGraphicsItem* parent):QObject (),
QGraphicsPixmapItem (parent)
{
Highscore *highscore = new Highscore; // <-- Your problem is here
QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(die()));
timer->start(50);
} // <-- the highscore and timer pointers go out of scope here
在构造函数的末尾,指向Highscore实例的指针超出范围并丢失。您需要将其保存在Submarine类的成员变量中,以便随后在doSomething()方法中使用它。相同的问题适用于在构造函数主体中创建的QTimer *计时器指针。