私は公にQWidget
から継承されたクラスがあります。コピーコンストラクタ
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
私は私のプロジェクトを構築し、コンパイラは文句を:
私は上の他の質問からチェックアウトWARNING:: Base class "class QWidget" should be explicitly initialized in the copy constructor.
私の答えを得た。 しかし、私はこのようなことの初期化を追加したとき、実際には、次のとおりです。
QWidget::QWidget(const QWidget&) is private within this context
だから、私が間違っているのものを私に説明してください:私はコンパイルエラーだ
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;
};
。
'QWidget'があなたの派生型のどちらかであってはならないことを意味する、構成可能コピーするように設計されていないようです:QtはコピーがそのdocumentationではQObjectに許可された場合に生じるであろう問題のいくつかの例を示します。 – juanchopanza
'QWidget'のコピーコンストラクタを明示的に作成したのでしょうか、それともコンパイラに残しましたか? – Olayinka
QWidgetのコピーコンストラクタを作成する必要はありません。私は、オブジェクトのコピーコンストラクタのinitリストのQWidget :: Cpoy-Constructorを呼び出すオブジェクトを初期化することができます。 –