2013-05-06 101 views
0

我遇到了Qt中帖子標題中描述的錯誤。錯誤:C2248:'QGraphicsItem :: QGraphicsItem':無法訪問在'QGraphicsItem'類中聲明的私有成員'

我有一個類調用「球」,它繼承了繼承QGraphicsItem的類調用「tableItem」。 我正在嘗試使用原型設計模式,因此在球類中包含了一個克隆方法。

這裏是我的代碼片段: 對於球頭和類

#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; 
} 

的表項標題:

#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 

和表項類:

#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

哪一行是錯誤? – 2013-05-06 03:46:04

+0

我認爲這將是有用的,如果你可以提供鏈接到'QGraphicsItem'頭,因爲錯誤消息提到類 – 2013-05-06 03:49:17

+0

似乎是克隆方法在球中的返回語句: ball * ball :: clone()const {返回新球(* this); } 但Qt的指示錯誤來自表項header..thus結束我不知道.. – ImNoob 2013-05-06 03:50:04

回答

1

提供您自己的拷貝構造函數可能會有幫助。

默認的複製構造函數會嘗試從您的類及其父項中複製所有數據成員。

在您自己的拷貝構造函數中,您可以使用最適當的拷貝方式處理數據的拷貝。

+0

是的,問題似乎是複製構造函數。我提供我自己的拷貝構造函數,它似乎work.thanks :) – ImNoob 2013-05-06 04:47:33

相關問題