Я столкнулся с ошибкой, описанной в заголовке сообщения в Qt.Ошибка: C2248: «QGraphicsItem :: QGraphicsItem»: не может получить доступ к закрытому члену, объявленному в классе «QGraphicsItem»
У меня есть вызов класса «ball», и он наследует вызов класса «tableItem», который наследует QGraphicsItem. Я пытаюсь использовать образец шаблона прототипа и, таким образом, включил метод клонирования внутри класса шара.
Вот мой фрагмент кода: Для шарового заголовка и класса
#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 или переменных объявлены частными и, таким образом, порождают это. Некоторое решение указывает на использование интеллектуального указателя, но это, похоже, не работает в моем случае.
Любая помощь приветствуется.
, на чью строку ошибка? –
Я думаю, что это будет полезно, если вы можете предоставить ссылку на заголовок 'QGraphicsItem', так как сообщение об ошибке упоминает, что класс –
, по-видимому, является оператором возврата метода clone в мяч: ball * ball :: clone() const { вернуть новый шар (* это); } но Qt указывает на ошибку приходит с конца TableItem header..thus я не уверен .. – ImNoob