Q_OBJECT funktioniert nur mit Header Datei !?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ThoWaBu
Beiträge: 449
Registriert: 16.01.2003 12:48:51
Wohnort: Butzbach
Kontaktdaten:

Q_OBJECT funktioniert nur mit Header Datei !?

Beitrag von ThoWaBu » 02.10.2011 18:47:34

Hallo,

ich versuche mich im moment in QT einzuarbeiten.
Dabei habe ich verschiedene Klassen in ein .cpp gepackt.
(OGraphPlotter)
Diese Fehlermeldung habe ich dann auch prompt erhalten :

undefined reference to 'vtable for OGraphPlotter'

Die Meldung verschwindet wenn ich Q_OBJECT aus der Klasse entferne.
Splitte ich deklaration und definition in .cpp und .h kompiliert er auch durch...
Kennt jemand den Zusammenhang ?

Es scheint wohl irgendwas mit dem MOC Prozess passieren... ?

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Q_OBJECT funktioniert nur mit Header Datei !?

Beitrag von syssi » 03.10.2011 09:57:09

Sicher, dass alle notwendigen Bibliotheken an den Compiler per "-l" uebergeben wurden? Beispiel: Benutze ich Funktionen aus der math.h, wie z.B. den sin() und compiliere mittels "gcc test.c" anstt "gcc -lm test.c", dann wuerde ich den gleichen Fehler erhalten.

ThoWaBu
Beiträge: 449
Registriert: 16.01.2003 12:48:51
Wohnort: Butzbach
Kontaktdaten:

Re: Q_OBJECT funktioniert nur mit Header Datei !?

Beitrag von ThoWaBu » 03.10.2011 10:52:36

Weiss nicht ob ich Dich richtig verstanden haben, deshalbn mit eigenen Worten :

Der Compiler findet das Header und kann somit den Funktionsrumpf bestimmen.
Nur der Linker findet die entsprechende Lib nicht und kann somit den "Objectcode" nicht linken ?
(reference)

Seltsam ist aber :

- Entferne ich Q_OBJECT aus der Klassendef. verschwindet der Fehler und die SIGNAL/SLOTS funktionieren natürlich nicht mehr.
- Entferne ich den Konstruktor bekomme ich auch keine Fehlermeldung.
- Trenne ich def. und Deklaration funktionierts. (Header und Sourcefile für meine neue Klasse)

Arbeite mit dem QT EclipsePlugin.

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Q_OBJECT funktioniert nur mit Header Datei !?

Beitrag von syssi » 03.10.2011 11:56:04

Ja, so war es gemeint aber dein Problem ist ein wenig verzwickter. Q_OBJECT ist ein Makro, welches von moc bearbeitet wird. Es scheint so, als wuerdest du deine .h Dateien von moc bearbeiten lassen. Sobald du das Makro in die Header schreibst funktioniert es deshalb. Ich weiss nicht, was das korrekte Vorgehen ist. Ich vermute mal, dass du einfach die entsprechende cpp-Datei auch per moc verarbeiten lassen musst.

ThoWaBu
Beiträge: 449
Registriert: 16.01.2003 12:48:51
Wohnort: Butzbach
Kontaktdaten:

Re: Q_OBJECT funktioniert nur mit Header Datei !?

Beitrag von ThoWaBu » 03.10.2011 14:12:11

Bei der ganzen Makefile erzeugerei steige ich noch nicht so ganz durch.

Klingt schlüssig.
Dort steht nur dar header file drin.
Erklärt warum es beim auslagern klappt.

Frage mich wie man auf sowas kommt...
Danke :)

Antworten