Signal <-> Slot collect2:ld returned 1 exit status

Alles rund um die Programmierung mit Qt
Antworten
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Signal <-> Slot collect2:ld returned 1 exit status

Beitrag von Metzlmane »

Hy Leute,

ich bin gerade ziemlich baff da ich versuche ein Child-Widget mit einem Parent Widget zu verknüpfen via Signal-Slot-Konzept. Bisher lief alles gut aber als ich versucht habe die Signal-Methode im Main-Widget zu erstellen bekam ich diese Fehlermeldung:

Code: Alles auswählen

collect2:ld returned 1 exit status
Meines Wissens kam diese bisher nur wenn ich 2 Namen/Variablen/Wasauchimmer gleich benannt habe. Laut Google ist es ein Linkerproblem.
Ich habe diese methode mal nach public slots kopiert und siehe da.. der Fehler war weg.

Code: Alles auswählen

void sendstringlist(QStringList ff);
In meinem Qt-Buch steht dass Singals und Slots eigentilch nur ganz normale Methoden sind deswegen verstehe ich nicht warum der Fehler einmal erscheint und das andere mal nicht.

Es funktioniert auch unter Signals wenn ich die Deklaration der Methode auskommentiere in der allerdings nichts drin steht

Code: Alles auswählen

void Mainwindow::sendstringlist(QStringList ff)
{

}
Ich habe schon einiges Versucht aber ich komme auf keinen Ansatz an was es liegen könnte. Irgendwelche Ideen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die komplette Fehlermeldung wäre nicht schlecht. Ich vermute Q_OBJECT wurde vergessen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

Code: Alles auswählen

Führe Build-Schritte für Projekt Instaler aus...
Unveränderte Konfiguration, qmake-Schritt wird übersprungen.
Starte: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w 
mingw32-make: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop' 
C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Release 
mingw32-make[1]: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop' 
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\Installer.o ..\Instaler\Installer.cpp 
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\main.o ..\Instaler\main.cpp 
C:\Qt\2010.04\qt\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\Instaler\Installer.h -o release\moc_Installer.cpp 
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\moc_Installer.o release\moc_Installer.cpp 
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\Instaler.exe release/Installer.o release/main.o release/moc_Installer.o -L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4 
release/moc_Installer.o:moc_Installer.cpp:(.text+0x190): multiple definition of `Mainwindow::sendstringlist(QStringList)' 
release/Installer.o:Installer.cpp:(.text+0x0): first defined here 
collect2: ld returned 1 exit status 
mingw32-make[1]: Leaving directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop' 
mingw32-make: Leaving directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop' 
mingw32-make[1]: *** [release\Instaler.exe] Error 1 
mingw32-make: *** [release] Error 2 
The Prozess "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" wurde mit dem Rückgabewert %2 beendet.
Fehler beim Erstellen des Projekts Instaler (Ziel: Desktop)
Beim Ausführen des Build-Schritts 'Make'
Q_OBJECT steht drin
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Ich habe diese methode mal nach public slots kopiert und siehe da.. der Fehler war weg.
Also war dein Problem dann gelöst?

Deine Slots musst du als public Q_SLOTS deklarieren, das hat schon Sinn gemacht, dass du deine slot methode da reinkopiert hast, weil sie da eigentlich schon die ganze Zeit hätte drin stehen müssen :P

Wenn das hier

Code: Alles auswählen

void sendstringlist(QStringList ff);
dein Slot ist, dann sollte es auch unter public Q_SLOTS auftauchen.
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

Tut mir leid aber ich versteh dich gerade nicht ganz :(

Code: Alles auswählen

class Mainwindow : public QMainWindow
{
    Q_OBJECT

public:
    Mainwindow(QMainWindow *parent = 0);

public slots:
    void connectto();


private:
    QScrollArea *sca_List,*sca_Sublist,*sca_Overall,*sca_Settings;
    QLabel *label_title;
    QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings,*bn_con;
    QStringList sl1,sl2,sl3;

    //! [Allgemeine Daten]

signals:
    void sendstringlist(QStringList);

};
so steht es bisher drin in meiner Klasse aber das erzeugt einen Fehler und wenn ich das unter signals: nach public slots kopiere dann läuft es, das ist das was mich verwundert, denn anscheinend sagt er dass ich es doppelt definiere? (also nicht kopieren sondern verschieben :wink: )
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

nun habe ich wirklich alles Auskommentiert und es bleibt nur die Klasse Mainwindow übrig, aber trotzdem kommt der gleiche Fehler immer wieder ..

brauche ich einen speziellen Eintrag in der .pro um Signals erstellen zu können?

Header:

Code: Alles auswählen

#include <QtGui>
#include <QMap>
#include <QApplication>


class Mainwindow : public QWidget
{
    Q_OBJECT

public:
    Mainwindow(QWidget *parent = 0);

public slots:
    //void connectto();

private:
    QScrollArea *sca_List,*sca_Sublist,*sca_Overall,*sca_Settings;
    QLabel *label_title;
    QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings,*bn_con;
    QStringList sl1,sl2,sl3;

    //! [Allgemeine Daten]

signals:
    void gubl();

};
.CPP

Code: Alles auswählen

Mainwindow::Mainwindow(QWidget *parent) : QWidget(parent) {
}

void Mainwindow::gubl()
{

}
hab noch einiges Ausprobiert und das blieb übrig
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Führe Build-Schritte für Projekt Instaler aus...

Unveränderte Konfiguration, qmake-Schritt wird übersprungen.

Starte: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w

mingw32-make: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'

C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Release

mingw32-make[1]: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'

g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\Installer.o ..\Instaler\Installer.cpp

g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\main.o ..\Instaler\main.cpp

C:\Qt\2010.04\qt\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-D__GNUC__ -DWIN32 ..\Instaler\Installer.h
-o release\moc_Installer.cpp

g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\moc_Installer.o release\moc_Installer.cpp

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows
-o release\Instaler.exe release/Installer.o release/main.o release/moc_Installer.o
-L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4

release/moc_Installer.o:moc_Installer.cpp:(.text+0x190): multiple definition of `Mainwindow::sendstringlist(QStringList)'
release/Installer.o:Installer.cpp:(.text+0x0): first defined here
collect2: ld returned 1 exit status
include guards und irgendwas merkwürdig eingebunden? Ansonsten mach mal n make clean, und qmake das ganze neu ... vielleicht haste noch irgendwelche object Leichen
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein SIGNAL muss man nicht definieren...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
MrAdams
Beiträge: 1
Registriert: 11. November 2010 18:33

Beitrag von MrAdams »

Hallo Metzelmane.

Hab mir vor ein paar Tagen auch QT installiert und genau den gleichen Fehler bekommen.
Ausgelöst wurde der durch das QWebView Objekt und ich hab das Inet dies bezüglich "durchgoogled" das einem schwindelig wird.

Am Ende fand ich raus das in der .pro Datei folgendes fehlte:

QT += core gui
QT += webkit

In der .cpp Datei fehlte zudem der include

#include <QtWebKit>

Danach bekam ich den Fehler nicht mehr.

Hoffe Dir geholfen zu haben.
Gruß
Ein QT Frischling :wink:
Antworten