expected unqualified-id before '->' token

114
23 января 2021, 04:00

cpp. - ругается на цикл где if: expected unqualified-id before '->' token, не нравится Sprite

#include "sprite.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
Sprite::Sprite(QObject *parent) : QObject(parent), QGraphicsItem() //, QGraphicsPixmapItem()
{
    currentFrame = 0;
    spriteImage = new QPixmap(":monkey.png");
    this->setPos(QPointF(-10, -10));
}
Sprite::~Sprite()
{
}
QRectF Sprite::boundingRect() const
{
    return QRectF(-10,-10,80,60); //область в которой лежит спрайт
}
void Sprite::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->drawPixmap(-10,-10, *spriteImage, currentFrame, 0, 80,60);
    Q_UNUSED(option);
    Q_UNUSED(widget);
}
void Sprite::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_W)
       { Sprite->setPos(0,5); } else
    if (event->key() == Qt::Key_S)
       { Sprite->setPos(0,-5); } else
    if (event->key() == Qt::Key_A)
       { Sprite->setPos(-5,0); } else
    if (event->key() == Qt::Key_D)
       { Sprite->setPos(5,0); }
}
void Sprite::slotGameTimer() 
{
        if(this->x() - 10 < -250){
            this->setX(-240);       // слева
        }
        if(this->x() + 10 > 250){
            this->setX(240);        // справа
        }
        if(this->y() - 10 < -250){
            this->setY(-240);       // сверху
        }
        if(this->y() + 10 > 250){
            this->setY(240);        // снизу
        }
     /* Проверка выхода за границы поля */
}

На всякий случай хедер

#define SPRITE_H
#include <QObject>
#include <QGraphicsItem>
#include <QGraphicsPixmapItem>
#include <QTimer>
#include <QPixmap>
#include <QPainter>
#include <QGraphicsScene> 
#include <QKeyEvent>

class Sprite : public QObject, public QGraphicsItem //, public QGraphicsPixmapItem
{
    Q_OBJECT
    Q_PROPERTY(QPointF pos READ pos WRITE setPos)
public:
    explicit Sprite(QObject *parent = 0);
    QPointF pos() const;
    void setPos(QPointF newPos);
    //sprite();
    ~Sprite(); 
signals:
public slots:
    void slotGameTimer(); 
private:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    QRectF boundingRect() const;
private:
   // QTimer *timer;
    QPixmap *spriteImage;
    int currentFrame;
protected:
    void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
};
#endif // SPRITE_H

Не понимаю, что не так. Помогите, пожалуйста!

Answer 1

У вас Sprite - название класса, класс не может быть слева от оператора ->. Если вам нужно вызвать метод текущего объекта класса, пишите:

this->setPos(0,5);

или

setPos(0,5);

Не заметил сразу, у вас переопределён метод setPos, не являющийся виртуальным. Определите, какой метод вам нужен: метод вашего класса Sprite или класса QGraphicsItem. Выберите один из следующих вариантов:

QGraphicsItem::setPos(0,5);
Sprite::setPos(QPointF(0,5));
READ ALSO
Rails 6 не подключается bootstrap 4 и jQuery

Rails 6 не подключается bootstrap 4 и jQuery

Выдает после установки bootstrap 4 и jQuery в панели разработчика ошибки

156
В чем разница между div и span

В чем разница между div и span

Я новичок в программировании и хотелось бы досконально разобраться в чем разница между div и spanСтоит ли использовать только div или только span или...

132
Установка бесконечного таймера для переключения активного элемента

Установка бесконечного таймера для переключения активного элемента

Есть блок, в котором находится списокЕсть функция: при клике на элемент списка li меняется фон блока на соответствующий

114
Как скрыть элемент на время скролла страницы?

Как скрыть элемент на время скролла страницы?

Хочу скрывать блок пока пользователь находится в процессе пролистывания страницы и показывать его через пару секунд после остановки

91