[gelöst] Erben von privaten Qt Klassen (PIMPL)
Verfasst: 16. Dezember 2009 14:17
Hallo zusammen,
ich habe meine eigene Implementierung der Klasse QSqlTableModel sowie QSqlTableModelPrivate (Klasse MySqlTableModel und MySqlTableModelPrivate).
MySqlTableModel erbt von QSqlQueryModel; MySqlTableModelPrivate erbst von QSqlQueryModelPrivate.
Diese und weitere Klassen habe ich in eine Bibliothek zusammengefasst. Wenn ich diese Bibliothek dynamisch übersetze (als auch Qt dynamisch), erhalte ich folgenden Linkerfehler:
Wenn ich mein Projekt statisch übersetze (als auch Qt statisch), funktioniert alles problemlos.
Hier ein Ausschnitt aus meinem Code:
Global.h mit Definition und Makros
MySqlTableModel.h
MySqlTableModel_p.h
Habt ihr eine Idee, wie ich dieses Problem lösen kann?
ich habe meine eigene Implementierung der Klasse QSqlTableModel sowie QSqlTableModelPrivate (Klasse MySqlTableModel und MySqlTableModelPrivate).
MySqlTableModel erbt von QSqlQueryModel; MySqlTableModelPrivate erbst von QSqlQueryModelPrivate.
Diese und weitere Klassen habe ich in eine Bibliothek zusammengefasst. Wenn ich diese Bibliothek dynamisch übersetze (als auch Qt dynamisch), erhalte ich folgenden Linkerfehler:
Code: Alles auswählen
2>MySqlTableModel.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall QSqlQueryModelPrivate::~QSqlQueryModelPrivate(void)" (??1QSqlQueryModelPrivate@@UAE@XZ) referenced in function __unwindfunclet$??0MySqlTableModelPrivate@@QAE@XZ$0
2>MySqlTableModel.obj : error LNK2019: unresolved external symbol "public: void __thiscall QSqlQueryModelPrivate::initColOffsets(int)" (?initColOffsets@QSqlQueryModelPrivate@@QAEXH@Z) referenced in function "public: virtual void __thiscall MySqlTableModel::setTable(class QString const &)" (?setTable@MySqlTableModel@@UAEXABVQString@@@Z)
Hier ein Ausschnitt aus meinem Code:
Global.h mit Definition und Makros
Code: Alles auswählen
...
#ifdef BUILD_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
...
MySqlTableModel.h
Code: Alles auswählen
...
class EXPORT MySqlTableModel: public QSqlQueryModel
{
// enable qt signals/slots
private:
Q_OBJECT
Q_DECLARE_PRIVATE(MySqlTableModel)
public:
...
MySqlTableModel_p.h
Code: Alles auswählen
...
class MySqlTableModelPrivate: public QSqlQueryModelPrivate
{
Q_DECLARE_PUBLIC(MySqlTableModel)
public: