Unresolved Links bei Signals und Slots trotz Q_OBJECT

Alles rund um die Programmierung mit Qt
Antworten
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Unresolved Links bei Signals und Slots trotz Q_OBJECT

Beitrag von pospiech »

Ich habe eine Thread Klasse "GratingVariation" die bislang in der Header Datei von der Klasse "DialogGratingPeriodVariation" oben mitdrinstand. Das funktionierte wunderbar. Dabei steht in beiden Klassen ein 'Q_OBJECT'.

Um den Code übersichtlicher zu machen habe ich den Thread Code in eine weitere Headerdatei "GratingVariationThread.h" ausgelagert, die jetzt so aussieht:

Code: Alles auswählen

#include <QtCore/QThread>

class GratingVariation : public QThread
{
   Q_OBJECT
public:
...
diese Headerdatei wird jetzt von DialogGratingPeriodVariation.h eingebunden.

Und jetzt wird der Code nicht mehr gelinkt. Ich bekomme nämlich bei allen Signals und Slots einen Linker Fehler
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: void __thiscall GratingVariation::signalNewImageCreated(int)" (?signalNewImageCreated@GratingVariation@@IAEXH@Z)".
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: void __thiscall GratingVariation::ThreadStopped(void)" (?ThreadStopped@GratingVariation@@IAEXXZ)".
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: void __thiscall GratingVariation::NewImageAvailable(void)" (?NewImageAvailable@GratingVariation@@IAEXXZ)".
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall GratingVariation::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GratingVariation@@UAEHW4Call@QMetaObject@@HPAPAX@Z)".
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void * __thiscall GratingVariation::qt_metacast(char const *)" (?qt_metacast@GratingVariation@@UAEPAXPBD@Z)".
1>DialogGratingPeriodVariation.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct QMetaObject const * __thiscall GratingVariation::metaObject(void)const " (?metaObject@GratingVariation@@UBEPBUQMetaObject@@XZ)".
Sicherlich mache ich etwas falsch, aber ich sehe nicht was, denn ich habe den Code ja nur in eine Headerdatei ausgelagert.

Aber vielleicht habe ich ja auch ein Grundkonzept nicht verstanden und benötige eine Erklärung.

Matthias
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Das Problem ist, dass die Anweisung Q_OBJECT für den Meta Object Compiler ist. Der erzeugt den Code für die fehlenden Verweise. Wenn Du aber nicht die entsprechende CPP Datei mit dem Ouput des MOCs in Dein Projekt integrierst, dann fehlen die Verweise.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag von pospiech »

Volker hat geschrieben:Das Problem ist, dass die Anweisung Q_OBJECT für den Meta Object Compiler ist. Der erzeugt den Code für die fehlenden Verweise. Wenn Du aber nicht die entsprechende CPP Datei mit dem Ouput des MOCs in Dein Projekt integrierst, dann fehlen die Verweise.
Muss denn für jede Header Datei der MOC Compiler ausgeführt werden?
Vorher wurde ja auch nur für eine Header Datei der Compiler aufgerufen und das reichte.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Für jede die eine Klassendefinition mit Q_OBJECT enthält.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Antworten