c++错误:因为下列虚函数是纯的

C++ Error: because the following virtual functions are pure within

本文关键字:函数 错误 因为 c++      更新时间:2023-10-16

我在类中分配对象时有问题。感觉我做得对,但它不让我跑。我已经查过了,但我不知道我做错了什么,或者和其他人有什么不同。我已经注释掉了一堆东西但是它仍然不能运行

rifle.h

#ifndef rifle_H
#define rifle_H
#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QTimer>
#include <QDialog>
class rifle : public QGraphicsItem
{
public:
    rifle();//(qreal dirx, qreal diry);
    //virtual ~rifle();
    void move();
protected:
private:
    //QPixmap shot;
    qreal m_Speed;
    qreal m_DirX;
    qreal m_DirY;
};
#endif // rifle_H

rifle.cpp

#include "rifle.h"
rifle::rifle() //qreal dirx, qreal diry
//    : m_Speed(5.0)
//    , m_DirX(dirx)
//    , m_DirY(diry)
{
    //shot.load(":/pic/rifle.png");
}
rifle::~rifle()
{
}

void rifle::move()
{
    setPos(x()+m_Speed*m_DirX, y()+m_Speed*m_DirY);
}

我在这里写代码

void Dialog::fire()
{
    qreal dirx = ui->graphicsView->m_FireTarget.x()-200.0;
    qreal diry = ui->graphicsView->m_FireTarget.y()-200.0;
    qreal length = sqrt(dirx*dirx+diry*diry);
    if (length!=0)
    {
        // normalized direction vector
        qreal invLength= 1.0/length;
        dirx *= invLength;
        diry *= invLength;
        // creating an angle perturbation of +/- 3°
        qreal alphaPerturbation = static_cast<qreal>(qrand()%6-3) * M_PI / 180.0;
        qreal xPerturbation = cos(alphaPerturbation);
        qreal yPerturbation = sin(alphaPerturbation);
        // cos(a+b)=...
        dirx = dirx*xPerturbation - diry*yPerturbation;
        // sin(a+b)=...
        diry = diry*xPerturbation + dirx*yPerturbation;
        /*rifle**/ circle = new rifle(dirx, diry);
        scene->addItem(circle);
    }
}

http://qt-project.org/doc/qt-4.8/qgraphicsitem.html

要编写自己的图形项,首先创建的子类QGraphicsItem,然后开始通过实现它的两个纯虚拟公共函数:boundingRect(),它返回由项目和paint()绘制的区域,它们实现了实际的绘画。

必须在rifle中重写这些函数,因为它们是基类中的纯虚函数。