0

Qt で投稿タイトルに記載されているエラーが発生しました。

クラス呼び出し「ボール」があり、QGraphicsItem を継承するクラス呼び出し「tableItem」を継承します。プロトタイプ デザイン パターンを使用しようとしているため、ball クラス内に clone メソッドを含めました。

これが私のコードスニペットです: ボールヘッダーとクラス用

#ifndef BALL_H
#define BALL_H

#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QtCore/qmath.h>
#include <QDebug>
#include "table.h"
#include "tableitem.h"

class ball : public TableItem
{
public:
    ball(qreal posX, qreal posY, qreal r, qreal VX, qreal VY, table *table1);
    ~ball();


    virtual ball* clone() const;

    virtual void initialise(qreal posX, qreal posY, qreal r, qreal VX, qreal VY);

private:

    table *t;

};

#endif // BALL_H

そしてボールクラス:

#include "ball.h"

ball::ball(qreal posX, qreal posY, qreal r, qreal VX, qreal VY, table *table1):
    TableItem(posX, posY, r, VX, VY),
    t(table1)
{}

ball::~ball()
{}

/* This is where the problem is. If i omitted this method, the code runs no problem! */
ball *ball::clone() const
{
    return new ball(*this);

}

void ball::initialise(qreal posX, qreal posY, qreal r, qreal VX, qreal VY)
{
    startX = posX;
    startY = posY;
    setPos(startX, startY);

    xComponent = VX;
    yComponent = VY;

    radius = r;
}

tableItem ヘッダー:

#ifndef TABLEITEM_H
#define TABLEITEM_H

#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsScene>

class TableItem: public QGraphicsItem
{
public:
    TableItem(qreal posX, qreal posY, qreal r, qreal VX, qreal VY);

    virtual ~TableItem();

    qreal getXPos();
    qreal getYPos();
    qreal getRadius();


protected:
    qreal xComponent;
    qreal yComponent;

    qreal startX;
    qreal startY;
    qreal radius;

};

#endif // TABLEITEM_H

および tableitem クラス:

#include "tableitem.h"

TableItem::TableItem(qreal posX, qreal posY, qreal r, qreal VX, qreal VY)
{
    this->xComponent = VX;
    this->yComponent = VY;

    this->startX = posX;
    this->startY = posY;

    this->radius = r;
}

TableItem::~TableItem()
{}
qreal TableItem::getXPos()
{
    return startX;
}

qreal TableItem::getYPos()
{
    return startY;
}

qreal TableItem::getRadius()
{
    return radius;
}

問題をグーグルで検索し、stackoverflow フォーラムを検索すると、一部の qgraphicsitem コンストラクターまたは変数がプライベートと宣言されているため、これが発生することが示されているようです。いくつかの解決策はスマートポインターの使用を示していますが、私の場合はうまくいかないようです。

どんな助けでも大歓迎です。

4

1 に答える 1