复制继承类的构造函数

时间:2013-12-10 20:44:49

标签: c++ qt copy-constructor

我正在尝试定义类的复制构造函数,但我错了。我正在尝试使用这个构造函数来做QGraphicsRectItem的儿子:

QGraphicsRectItem( qreal x, qreal y, qreal width, qreal height, QGraphicsItem * parent = 0 )

这里有一些代码

由QtL定义的QGraphicsRectItem

QGraphicsRectItem( qreal x, qreal y, qreal width, qreal height, QGraphicsItem * parent = 0 )

Cell.h,儿子的课程:

Cell();
Cell(const Cell &c);
Cell(qreal x, qreal y, qreal width, qreal height, QGraphicsItem * parent = 0 );

Cell.cpp:

Cell::Cell() {}

/* got error defining this constructor (copy constructor) */
Cell::Cell(const Cell &c) :
    x(c.rect().x()), y(c.rect().y()),
    width(c.rect().width()), height(c.rect().height()), parent(c.parent) {}


Cell::Cell(qreal x, qreal y, qreal width, qreal height, QGraphicsItem *parent) : 
    QGraphicsRectItem(x, y, width, height, parent) {
    ...
    // some code
    ...
}

错误说:

/../../../../cell.cpp:7: error: class 'Cell' does not have any field named 'x'
/../../../../cell.cpp:7: error: class 'Cell' does not have any field named 'y'
/../../../../cell.cpp:7: error: class 'Cell' does not have any field named 'width'
/../../../../cell.cpp:7: error: class 'Cell' does not have any field named 'height'
/../../../../cell.cpp:7: error: class 'Cell' does not have any field named 'parent'

谢谢

1 个答案:

答案 0 :(得分:1)

您需要按如下方式制作复制构造函数:

Cell::Cell(const Cell &c)
    :
        QGraphicsRectItem(c.rect().x(), c.rect().y(),
                          c.rect().width(), c.rect().height(),
                          c.parent())
{}

原因是,由于继承,您的Cell QGraphicsRectItem。因此,构造函数的c参数也表示QGraphicsRectItem,因此您可以使用其QGraphicsRectItem::rect()QGraphicsRectItem::parent()函数来构造新对象 - c的副本。