2013-05-06 7 views
0

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

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

+0

, на чью строку ошибка? –

+0

Я думаю, что это будет полезно, если вы можете предоставить ссылку на заголовок 'QGraphicsItem', так как сообщение об ошибке упоминает, что класс –

+0

, по-видимому, является оператором возврата метода clone в мяч: ball * ball :: clone() const { вернуть новый шар (* это); } но Qt указывает на ошибку приходит с конца TableItem header..thus я не уверен .. – ImNoob

ответ

1

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

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

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

+0

Да, проблема, похоже, является конструктором копирования. Я предоставляю свой собственный конструктор копий, и кажется, что он работает. – ImNoob

Смежные вопросы

 Смежные вопросы