Mam klasy, która jest publicznie odziedziczoną QWidget
:kopia konstruktor pochodzącego klasie QT
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
Kiedy zbudowany mojego projektu, kompilator narzeka:
WARNING:: Base class "class QWidget" should be explicitly initialized in the copy constructor.
I wyrejestrowany z innych pytań na stackoverflow, i dostałem moją odpowiedź. Ale faktem jest, kiedy dodałem, że inicjowanie takiego:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
QWidget(other), //I added the missing initialization of Base class
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
Dostałem błąd kompilacji:
QWidget::QWidget(const QWidget&) is private within this context
Tak, proszę wyjaśnić mi, co robię źle.
Wydaje się, że 'QWidget' nie jest przeznaczony do kopiowania constructible, co oznacza twój typ pochodny nie powinno być. – juanchopanza
Czy jawnie utworzono konstruktor kopii dla 'QWidget' lub pozostawiłeś go kompilatorowi? – Olayinka
Nie trzeba tworzyć Copy-Constructor dla QWidget. Mogę tylko zainicjować obiekt wywołujący QWidget :: Cpoy-Constructor na liście init konstruktora kopiowania mojego obiektu. –