Vì vậy, tôi có một lớp trừu tượng Panel
và triển khai thực hiện MyPanel
. Họ trông giống như thế này:Chưa được giải quyết bên ngoài (bộ tạo lớp/trình phá hủy lớp trừu tượng)
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) = 0;
virtual ~Panel() = 0;
// but wait, there's more!!
};
class MyPanel : public Panel
{
public:
MyPanel(QWidget* parent = 0);
~MyPanel() {}; // nothing to do here
};
MyPanel::MyPanel(QWidget* parent) :
Panel(parent)
{
// you must construct additional pylons
}
Tôi nhận được mối liên kết lỗi cho các nhà xây dựng/destructor từ VC++
error LNK2019: unresolved external symbol "public: virtual __thiscall Panel::~Panel(void)" ([email protected]@[email protected]) referenced in function "public: virtual __thiscall MyPanel::~MyPanel(void)" ([email protected]@[email protected]) mypanel.obj
error LNK2019: unresolved external symbol "public: __thiscall Panel::Panel(class QWidget *)" ([email protected]@[email protected]@@@Z) referenced in function "public: __thiscall MyPanel::MyPanel(class QWidget *)" ([email protected]@[email protected]@@@Z) mypanel.obj
Tại sao tôi nhận được lỗi mối liên kết này?
--- CÂU TRẢ LỜI ---
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) : QWidget(parent) {};
virtual ~Panel() {};
// but wait, there's more!!
};
tôi nghĩ rằng tôi đã cố gắng này trước khi ăn trưa. Hóa ra tôi đã sai.
Dường như bạn có một số lỗi chính tả. Bạn có thể làm rõ? Tuyên bố lớp học cần phải kết thúc bằng a; ví dụ: lớp XXX {}; Ngoài ra bạn có những gì trông giống như một nhà xây dựng ảo nhưng điều đó không hợp lệ trong C++ – maccullt
Sửa lỗi chính tả của tôi và thêm giải pháp đúng. –
Trong "câu trả lời" của bạn, bạn nên chỉ ra một cách rõ ràng những gì bạn đã thay đổi (về cơ bản cung cấp các triển khai trống qua {}). Nếu không, nó còn lại như một bài tập để người đọc so sánh các mẫu mã của bạn và hiểu những gì khác nhau. – User