Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Qt/C++ QObject -> undefined vTable ?

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749

    Qt/C++ QObject -> undefined vTable ?

    Hallo,
    ich bekomme eine seltsamen Error der mir einfach unklar ist.
    Der Kompilierungsvorgang scheint irgendwie schon bis ganz ende zu laufen aber dann kommt kurz vor der INitialisierung folgender Fehler:

    Code:
    class_1.o(.text+0x28): In function `Class_1::Class_1[not-in-charge](Class_2*)':
    : undefined reference to `vtable for Class_1'
    class_1.o(.text+0x198): In function `Class_1::Class_1[in-charge](Class_2*)':
    : undefined reference to `vtable for Class_1'
    class_1.o(.text+0x2eb): In function `Class_1::~Class_1 [not-in-charge]()':
    : undefined reference to `vtable for Class_1'
    class_1.o(.text+0x30b): In function `Class_1::~Class_1 [in-charge]()':
    : undefined reference to `vtable for Class_1'
    class_1.o(.text+0x32e): In function `Class_1::~Class_1 [in-charge deleting]()':
    : undefined reference to `vtable for Class_1'
    collect2: ld returned 1 exit status
    dabei rufe ich bloß in der Klasse class_2 im Konstruktor mit Class_1* clp = new Class_1();
    die KLasse Class_1 auf.
    Mein Header von Class_1:

    [code
    class Class_1 : public QObject
    {
    Q_OBJECT
    ...
    [/code]

    das includieren und so habe ich auch.....
    cpp:

    Code:
    Class_1::Class_1(Class_2* pcl2)
    {
    ...
    Das seltsame ist wenn ich das Q_OBJECT im Header nur auskommentiere läuft alles prima.....
    was hat das mit dem Q_OBJECT zu tun ????

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Mat,

    was ist vTable? Ist das eine Tabelle vom Typ QTable?

    Schöne Grüße,
    Kirstin

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    vtable ist C++ - internes Zeugs. Das ist die Tabelle in der jeweils die Funktionspointer für die virtuellen Methoden gespeichert werden.

    Ich vermute jetzt mal ins blaue hinaus dass da mit moc was schiefläuft (der macht nämlich die Implementierung der Methoden die Q_OBJECT deklariert oder so ähnlich). Aber so genau kann man das mit fast null Daten zum Thema auch nicht sagen

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.03.2004
    Beiträge
    40
    Hast du die moc Datei eingebunden?

    Wenn du auto* als build framework benutzt:
    #include <dateiname.moc>
    make -f Makefile.cvs ; ./configure; make

    Wenn du qmake benutzt musst du glaube ich dateiname.cpp und dateiname.h in SOURCES bzw. HEADERS eintragen (qmake erstellt dann .moc.cpp Dateien und linkt die entsprechend).

    Wenn du eigene Makefiles benutzt musst du moc halt selber aufrufen.

    CU
    Andi

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Leute,

    unter kdevelop braucht man, glaube ich, moc... nicht einbinden.

    Unter Visual C++ braucht man zwar moc, aber dort bekommt man eigentlich die Meldung "Nichtaufgeloestes externes Symbol ...", wenn man die moc-Datei nicht einbindet.

    Allerdings hört es sich wirklich so an, als würde es an der moc_Datei liegen, da der Fehler weg ist, wenn Q_OBJECT auskommentiert wird. Seltsam...

    Mat, womit arbeitest du eigentlich? Welches Betriebssystem und welches Programm?

    Schöne Grüße,
    Kirstin

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von bmann
    Wenn du qmake benutzt musst du glaube ich dateiname.cpp und dateiname.h in SOURCES bzw. HEADERS eintragen (qmake erstellt dann .moc.cpp Dateien und linkt die entsprechend).
    Korrekt. Man kann die moc Datei inkludieren wenn man möchte, qmake erkennt das. Aber besser mal nur die Dateien richtig eintragen.

    Manchmal passiert es, daß man zwar die Dateien korrekt eingetragen hat, aber man nachträglich ein Q_OBJECT Macro einfügt.
    Dann hat sich die .pro Datei nicht geändert und qmake daher keine neuen Regeln erstellt.

    In so einem Fall reicht es die .pro Datei "neuer" zu machen, also neu abzuspeichern, oder unter Unix/Linux
    touch meinproject.pro

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.10.2001
    Ort
    Darmstadt
    Beiträge
    5
    Das Problem hatte ich vor kurzem auch als ich Qt4 ausprobiert habe. Die Symptome waren genau die gleichen. Grund war dass moc nicht eingebunden war. Siehe http://lists.trolltech.com/qt-intere.../msg00726.html
    SuSE 8.0
    Kernel: Linux version 2.4.18-4GB

  8. #8
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Hallo,
    vielen dank für eure Antworten...

    @anda : EIn touch hat leider nichts gebracht.

    @Kirsche: Arbeite unter Linux/Debian mit kdevelop3

    Seltsam ist, dass ich ja bisher schon mehrere Klassen gebaut habe die auch mit QOBJECT funktionieren problemlos.
    Erst bei dieser neuen jetzt nimmer

    Im Makefile sind unter Sources und Headers die cpp und .h von der Datei/Klasse schon eingetragen....

    Naja ich versuch mein Glück weiter...über diverse Links...

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Dann das Makefile entfernen und neu Erzeugen
    #> rm Makefile
    #> qmake deine.pro

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    HOlla,
    ich liebe euch

    habs hinbekommen.
    Bei mir wars so dass mein Makefile überhaupt keine moc_files erzeugungs-einträge aufwies die überhaupt ein moc-file erzeugen sollten von der neuen Klasse/Datei.

    Habs nachgezogen und jetzt gehts wieder ...Danke euch!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •