ошибка: C2248: ‘QGraphicsItem :: QGraphicsItem’: невозможно получить доступ к закрытому члену, объявленному в классе ‘QGraphicsItem’

Я столкнулся с ошибкой, описанной в заголовке поста в Qt.

У меня есть вызов класса «ball», и он наследует вызов класса «tableItem», который наследует QGraphicsItem.
Я пытаюсь использовать шаблон дизайна прототипа и, таким образом, включил метод клонирования внутри класса ball.

Вот мой фрагмент кода:
Для шарового заголовка и класса

#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 объявлены закрытыми, и, таким образом, вызывают это.
Некоторое решение указывает на использование умного указателя, но в моем случае это не работает.

Любая помощь приветствуется.

0

Решение

Предоставление вашего собственного конструктора копирования может помочь.

Конструктор копирования по умолчанию пытается скопировать все элементы данных из вашего класса и его родителей.

В своем собственном конструкторе копирования вы можете управлять копированием данных, используя наиболее подходящий способ копирования.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]