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 не будет объявлен, поэтому ошибка становится сложной. Есть ли хороший способ создать новую локацию игрока, а затем удалить старую после создания новой.

c++
-2
Tibblist 6 Май 2014 в 03:18

2 ответа

Лучший ответ

Как мне создать эту функцию, чтобы она создавала новый объект под тем же указателем, но удаляла старый объект?

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 ++, и если я правильно понимаю вашу цель, я настоятельно рекомендую вам изучить классы и инкапсуляцию.

0
Appleshell 6 Май 2014 в 00:55

Если я правильно понял ваше описание, вы хотите, чтобы playerLoc указывал на новый объект. для этого не нужно удалять указатель, просто определите его снова, например playerLoc = scene2->addEllipse(locaytion.getLocation(0),locaytion.getLocation(1),5,5,QPen(Qt::black),QBrush(Qt::black));, конечно, функция addEllipse должна возвращать указатель того же типа.

1
moki 5 Май 2014 в 23:35