指针声明超出作用域错误

pointer declared out of scope error

本文关键字:作用域 错误 声明 指针      更新时间:2023-10-16
    if (moveTicker > 0) {
    delete playerLoc;
}
moveTicker++;
QGraphicsEllipseItem * playerLoc = scene2->addEllipse(locaytion.getLocation(0),locaytion.getLocation(1),5,5,QPen(Qt::black),QBrush(Qt::black));

当编译器到达这是说playerLoc被调用超出范围,我得到,因为它应该是在if语句之后调用,但if语句不会运行,直到playerLoc已被声明,所以错误变得令人困惑。是否有好的方法来创建新的播放器位置,然后在创建新的播放器位置后删除旧的播放器位置

如果我正确理解了你的描述,你想让playerLoc指向一个新的对象。你不需要为此目的删除指针,只需重新定义它,例如playerLoc = scene2->addEllipse(locaytion.getLocation(0),locaytion.getLocation(1),5,5,QPen(Qt::black),QBrush(Qt::black));,当然addEllipse函数必须返回相同类型的指针。

我如何创建这个函数,使它创建一个新对象,在同一指针下,但删除旧对象?

QGraphicsEllipseItem * playerLoc = /* ... first declaration and definition */
if (moveTicker > 0) {
    delete playerLoc;
}
moveTicker++;
playerLoc = scene2->addEllipse(locaytion.getLocation(0),locaytion.getLocation(1),5,5,QPen(Qt::black),QBrush(Qt::black));
// you can just redefine it

但是既然你是用c++编程的,而且如果我对你的目标理解正确的话,我强烈建议你研究一下类和封装。