2017-03-28 1 views
0

Ich entwickle eine Anwendung (mit OpenCV), wo ich eine Bildlaufleiste erstellt und Funktionen verwandt, aber schließlich habe ich die Bildlaufleiste gelöscht. Der folgende Fehler occures:Qt moc_mainwindow

moc_mainwindow.cpp:-1: erreur : undefined reference to MainWindow::on_verticalScrollBar_actionTriggered(int)'

moc_mainwindow.cpp:-1: erreur : undefined reference to MainWindow::on_verticalScrollBar_sliderPressed()'

:-1: erreur : release/moc_mainwindow.o: bad reloc address 0x4 in section `.data'

collect2.exe:-1: erreur : error: ld returned 1 exit status

Vielen Dank für Hilfe

+0

Bitte lesen Sie, wie ein [MCVE] – Miki

+0

Drücken Reinigen Sie alle Register auf Build zu tun und dann Run Qmake – eyllanesc

+0

@eyllanesc ich gereinigt habe das Projekt aber der Fehler bleibt noch. Wenn ich jedoch leere Funktionen erzeuge, die den "fehlenden" entsprechen, läuft der Code natürlich, aber es ist natürlich kein optimaler Code. –

Antwort

1

Die Fehler undefined reference to `MainWindow::...' durch die Tatsache verursacht werden, dass Sie Funktionen in mainwindow.h erklärt haben, aber nicht überall definiert.

Um dies zu beheben, definieren Sie sie entweder in mainwindow.cpp oder entfernen Sie ihre Deklarationen von mainwindow.h. Wenn Sie sie nicht verwenden, sollten Sie sie entfernen.


Jetzt über „Qt zeigt eine Fehlermeldung über Funktionen über etw, die noch does'nt existieren“ Sie QMetaObject::connectSlotsByName: No matching signal for ... beziehen könnte.

Dies könnte passieren, wenn Sie eine oder mehrere Schlitze on_<objectName>_<signalName> (z on_verticalScrollBar_sliderPressed und on_verticalScrollBar_sliderPressed), aber das Objekt objectName existiert nicht genannt haben oder es existiert, aber kein Signal namens signalName hat.

Dies wird durch QMetaObject::connectSlotsByName() verursacht, die innerhalb des Aufrufs an ui->setupUi() aufgerufen wird. Diese Funktion versucht, alle Steckplätze zu verbinden, die der Syntax on_<objectName>_<signalName> entsprechen, und schreibt bei einem Fehler Warnungen an stderr (oder die Debug-Ausgabe).

Auch ich schlage vor, dass Sie QMetaObject::connectSlotsByName() und die on_<objectName>_<signalName> Syntax nicht verwenden. Wenn Sie .ui-Dateien verwenden, können Sie den Aufruf von QMetaObject::connectSlotsByName() nicht wie im generierten Code verhindern, aber wenn Sie die Syntax nicht verwenden, hat dies keine Auswirkungen. Stattdessen sollten Sie Signale und Slots explizit in Ihrem Code verbinden.

See:

+0

Danke! Meine Fehler sind verschwunden! –

Verwandte Themen