Tôi có một lớp học mà được công khai thừa hưởng từ QWidget
:copy constructor của lớp QT có nguồn gốc
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
Khi tôi xây dựng dự án của tôi, biên dịch phàn nàn:
WARNING:: Base class "class QWidget" should be explicitly initialized in the copy constructor.
Tôi chọn ra từ các câu hỏi khác về stackoverflow, và nhận được câu trả lời của tôi. Nhưng thực tế là, khi tôi nói thêm rằng khởi như thế này:
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;
};
tôi đã biên dịch báo lỗi:
QWidget::QWidget(const QWidget&) is private within this context
Vì vậy, xin vui lòng giải thích cho tôi những gì tôi đang làm sai.
trang mô tả
Có vẻ như rằng 'QWidget' không được thiết kế để được sao chép constructible, có nghĩa là loại có nguồn gốc của bạn không nên là một trong hai. – juanchopanza
Bạn đã tạo một cách rõ ràng một hàm tạo bản sao cho 'QWidget' hoặc bạn để nó cho trình biên dịch? – Olayinka
Tôi không cần phải tạo một Copy-Constructor cho QWidget. Tôi chỉ có thể khởi tạo đối tượng gọi QWidget :: Cpoy-Constructor trong danh sách init của hàm tạo bản sao của đối tượng của tôi. –