Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Qt-Code mit Fehlern!

  1. #1
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75

    Post Qt-Code mit Fehlern!

    hi,
    ich habe ein Qt-Programm unter Linux geschrieben (es ist noch nicht fertig) und mit Qt 3.0 übersetzt und es funktioniert einwandfrei. Nun wollte ich es auch für Windows umsetzen, doch erhalte ich VC++6 sehr viele Linker-Errors die für mich alle keinen wirklichen Sinn ergeben.

    --------------------Konfiguration: Dienstplaner - Win32 Release--------------------
    Kompilierung läuft...
    arbeitsfenster.cpp
    hauptfenster.cpp
    main.cpp
    moc_arbeitsfenster.cpp
    moc_hauptfenster.cpp
    Generieren von Code...
    Linker-Vorgang läuft...
    moc_arbeitsfenster.obj : error LNK2005: "public: virtual char const * __thiscall Arbeitsfenster::className(void)const " (?className@Arbeitsfenster@@UBEPBDXZ) bereits in arbeitsfenster.obj definiert
    moc_arbeitsfenster.obj : error LNK2005: "protected: virtual void __thiscall Arbeitsfenster::initMetaObject(void)" (?initMetaObject@Arbeitsfenster@@MAEXXZ) bereits in arbeitsfenster.obj definiert
    moc_arbeitsfenster.obj : error LNK2005: "public: static class QString __cdecl Arbeitsfenster::tr(char const *)" (?tr@Arbeitsfenster@@SA?AVQString@@PBD@Z) bereits in arbeitsfenster.obj definiert
    moc_arbeitsfenster.obj : error LNK2005: "public: static class QMetaObject * __cdecl Arbeitsfenster::staticMetaObject(void)" (?staticMetaObject@Arbeitsfenster@@SAPAVQMetaObjec t@@XZ) bereits in arbeitsfenster.obj definiert
    moc_arbeitsfenster.obj : error LNK2005: "private: static class QMetaObject * Arbeitsfenster::metaObj" (?metaObj@Arbeitsfenster@@0PAVQMetaObject@@A) bereits in arbeitsfenster.obj definiert
    moc_hauptfenster.obj : error LNK2005: "public: virtual char const * __thiscall Hauptfenster::className(void)const " (?className@Hauptfenster@@UBEPBDXZ) bereits in hauptfenster.obj definiert
    moc_hauptfenster.obj : error LNK2005: "protected: virtual void __thiscall Hauptfenster::initMetaObject(void)" (?initMetaObject@Hauptfenster@@MAEXXZ) bereits in hauptfenster.obj definiert
    moc_hauptfenster.obj : error LNK2005: "public: static class QString __cdecl Hauptfenster::tr(char const *)" (?tr@Hauptfenster@@SA?AVQString@@PBD@Z) bereits in hauptfenster.obj definiert
    moc_hauptfenster.obj : error LNK2005: "public: static class QMetaObject * __cdecl Hauptfenster::staticMetaObject(void)" (?staticMetaObject@Hauptfenster@@SAPAVQMetaObject@ @XZ) bereits in hauptfenster.obj definiert
    moc_hauptfenster.obj : error LNK2005: "private: static class QMetaObject * Hauptfenster::metaObj" (?metaObj@Hauptfenster@@0PAVQMetaObject@@A) bereits in hauptfenster.obj definiert
    arbeitsfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString __cdecl Arbeitsfenster::tr(char const *,char const *)" (?tr@Arbeitsfenster@@SA?AVQString@@PBD0@Z)
    hauptfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString __cdecl Hauptfenster::tr(char const *,char const *)" (?tr@Hauptfenster@@SA?AVQString@@PBD0@Z)
    Release/Dienstplaner.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Dienstplaner.exe - 13 Fehler, 0 Warnung(en)

    Ich habe schon in einem anderen Forum gefragt, dort meinte man es ist ein Synatxfehler (aber unter Linux funzt es einwandfrei).

    Ich weiß, dass dies ein Unix - Programmierer - Forum ist, aber mir wurde geraten hier zu fragen, da hier Leute sein sollen, die sich mit Qt auskennen.

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Quellcode? Ich schätze mal, das du irgendwelche Methodenbodys doppelt definiert hast.

  3. #3
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,
    hätte ich ja gleich mitangegeben können.

    http://www.gikrasoft.de.vu/downloads/Dienstplaner.zip

    Wäre echt nett, wenn jemand den durchsehen könnte.
    Leider ist er nicht besonders gut kommentiert. *sorry*

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Selbes .pro File unter Linux und Windows?

    Sieht so aus, als wäre da ein MOC File inkludiert und wird aber auch getrennt kompiliert und gelinkt.

    Ciao,
    _

    P.S. dein zip lässt sich nicht entzippem
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,
    jo stimmt sowas dummes aber auch, jetzt sind es nur noch drei Fehler:
    --------------------Konfiguration: Dienstplaner - Win32 Release--------------------
    Kompilierung läuft...
    arbeitsfenster.cpp
    dienst.cpp
    hauptfenster.cpp
    main.cpp
    Generieren von Code...
    Linker-Vorgang läuft...
    arbeitsfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString __cdecl Arbeitsfenster::tr(char const *,char const *)" (?tr@Arbeitsfenster@@SA?AVQString@@PBD0@Z)
    hauptfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString __cdecl Hauptfenster::tr(char const *,char const *)" (?tr@Hauptfenster@@SA?AVQString@@PBD0@Z)
    Release/Dienstplaner.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Dienstplaner.exe - 3 Fehler, 0 Warnung(en)

    irgendetwas haut mit QString nicht hin. qstring.h ist aber eingebunden.

    Tschau Gartenzwerg

    PS: zip-Archiv erneuert
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  6. #6
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,

    achso vergessen: unter Windows nutze ich die Qt 2.3 non-commercial-Edititon

    Hoffe ihr könnt mir helfen!

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Die beiden Symbol sind ansich im moc_arbeitsfenster.cpp

    Nimm mal die include der moc Dateien raus und mach einen rebuild.
    Vielleicht geht das extra kompilieren und dazu linken.

    Noch ein paar Anmerkungen:
    Deine Methoden zum Parsen der Farben sind nicht notwendig, Strng im Format #RRGGBB kann QColor direkt verstehen und hat dafür einen Konstruktor.

    Wenn du wo einen Qstring übergibst, mach statt
    Code:
    Klasse::methode(QString para)
    besser eine konstante Referenz
    Code:
    Klasse::methode(const QString& para)
    Das ist bei Parametern mit Klassen als Typ effizienter.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,

    danke für den Tipp und fürs durchsehen des Quellcodes!

    Wenn ich es einzeln compilieren und linken möchte, ist es mir nicht möglich die moc_*fenster.obj zu erzeugen, da er beim compilieren folgenden Fehler meldet:

    E:\Eigene Dateien\Sebastian\GiKraSoft\Dienstplaner>nmake moc_arbeitsfenster.obj

    Microsoft (R) Program Maintenance-Dienstprogramm: Version 6.00.8168.0
    Copyright (C) Microsoft Corp 1988-1998. Alle Rechte vorbehalten.

    cl -c -nologo -W3 -O1 -DNO_DEBUG -I"D:\qt\include" -Fomoc_arbeitsfenster
    .obj moc_arbeitsfenster.cpp
    moc_arbeitsfenster.cpp
    D:\qt\include\qcstring.h(50) : fatal error C1083: Include-Datei kann nicht geoef
    fnet werden: 'string.h': No such file or directory
    NMAKE : fatal error U1077: 'D:\PROGRA~1\MICROS~1\VC98\BIN\cl.exe' : Rueckgabe-Co
    de '0x2'
    Stop.


    die Pfade stimmen und die string.h ist garantiert vorhanden, woran liegt das?

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, eigenartig.
    Scheint als wäre das Makefile nicht richtig generiert worden.

    Eigentlich ist es nur wichtig, dass beim Lauf von tmake oder qmake keine include Direktiven für moc Dateien in den cpp Dateien sind.

    Dann generiert es Makefile Regeln für das Erstellen, Kompilieren und Linken der Moc Files.

    So sollte dann ein einfaches
    nmake
    reichen.

    Falls es nicht klappt, kann ich es am Montag in der Firma selbst unter Windows versuchen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,
    ok hab die Direktive auskommentiert, aber trotzdem der selbe Fehler:
    Code:
    E:\Eigene Dateien\Sebastian\GiKraSoft\Dienstplaner>nmake
    
    Microsoft (R) Program Maintenance-Dienstprogramm: Version 6.00.8168.0
    Copyright (C) Microsoft Corp 1988-1998. Alle Rechte vorbehalten.
    
            cl -c -nologo -W3 -O1 -DNO_DEBUG -I"D:\qt\include" -Foarbeitsfenster.obj
     arbeitsfenster.cpp
    arbeitsfenster.cpp
    D:\qt\include\qcstring.h(50) : fatal error C1083: Include-Datei kann nicht geoef
    fnet werden: 'string.h': No such file or directory
    NMAKE : fatal error U1077: 'D:\PROGRA~1\MICROS~1\VC98\BIN\cl.exe' : Rueckgabe-Co
    de '0x2'
    Stop.
    Das Makefile:
    Code:
    #############################################################################
    # Makefile for building Dienstplaner
    # Generated by tmake at 13:17, 2003/10/04
    #     Project: Dienstplaner
    #    Template: app
    #############################################################################
    
    ####### Compiler, tools and options
    
    CC	=	cl
    CXX	=	cl
    CFLAGS	=	-nologo -W3 -O1 -DNO_DEBUG
    CXXFLAGS=	-nologo -W3 -O1 -DNO_DEBUG
    INCPATH	=	-I"$(QTDIR)\include"
    LINK	=	link
    LFLAGS	=	/NOLOGO /SUBSYSTEM:windows
    LIBS	=	$(QTDIR)\lib\qt.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib
    MOC	=	moc
    UIC	=	uic
    
    ZIP	=	zip -r -9
    
    ####### Files
    
    HEADERS =	arbeitsfenster.h \
    		confreader.h \
    		dienst.h \
    		hauptfenster.h \
    		xmlparser.h
    SOURCES =	arbeitsfenster.cpp \
    		dienst.cpp \
    		hauptfenster.cpp \
    		main.cpp
    OBJECTS =	arbeitsfenster.obj \
    		dienst.obj \
    		hauptfenster.obj \
    		main.obj
    INTERFACES =	
    UICDECLS =	
    UICIMPLS =	
    SRCMOC	=	moc_arbeitsfenster.cpp \
    		moc_hauptfenster.cpp
    OBJMOC	=	moc_arbeitsfenster.obj \
    		moc_hauptfenster.obj
    DIST	=	
    TARGET	=	Dienstplaner.exe
    INTERFACE_DECL_PATH = .
    
    ####### Implicit rules
    
    .SUFFIXES: .cpp .cxx .cc .c
    
    .cpp.obj:
    	$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
    
    .cxx.obj:
    	$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
    
    .cc.obj:
    	$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
    
    .c.obj:
    	$(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ $<
    
    ####### Build rules
    
    all: $(TARGET)
    
    $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) 
    	$(LINK) $(LFLAGS) /OUT:$(TARGET) @<<
    	    $(OBJECTS) $(OBJMOC) $(LIBS)
    <<
    
    moc: $(SRCMOC)
    
    tmake: Makefile
    
    Makefile: Dienstplaner.pro
    	tmake Dienstplaner.pro -o Makefile
    
    dist:
    	$(ZIP) Dienstplaner.zip Dienstplaner.pro $(SOURCES) $(HEADERS) $(DIST) $(INTERFACES)
    
    clean:
    	-del arbeitsfenster.obj
    	-del dienst.obj
    	-del hauptfenster.obj
    	-del main.obj
    	-del moc_arbeitsfenster.cpp
    	-del moc_hauptfenster.cpp
    	-del moc_arbeitsfenster.obj
    	-del moc_hauptfenster.obj
    	-del $(TARGET)
    
    ####### Compile
    
    arbeitsfenster.obj: arbeitsfenster.cpp \
    		arbeitsfenster.h \
    		confreader.h \
    		dienst.h
    
    dienst.obj: dienst.cpp \
    		dienst.h \
    		confreader.h
    
    hauptfenster.obj: hauptfenster.cpp \
    		hauptfenster.h \
    		arbeitsfenster.h \
    		confreader.h \
    		dienst.h \
    		xmlparser.h
    
    main.obj: main.cpp \
    		hauptfenster.h \
    		arbeitsfenster.h \
    		confreader.h \
    		dienst.h \
    		xmlparser.h
    
    moc_arbeitsfenster.obj: moc_arbeitsfenster.cpp \
    		arbeitsfenster.h \
    		confreader.h \
    		dienst.h
    
    moc_hauptfenster.obj: moc_hauptfenster.cpp \
    		hauptfenster.h \
    		arbeitsfenster.h \
    		confreader.h \
    		dienst.h \
    		xmlparser.h
    
    moc_arbeitsfenster.cpp: arbeitsfenster.h
    	$(MOC) arbeitsfenster.h -o moc_arbeitsfenster.cpp
    
    moc_hauptfenster.cpp: hauptfenster.h
    	$(MOC) hauptfenster.h -o moc_hauptfenster.cpp
    Was mach ich falsch?

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  11. #11
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75

    Question

    hi,

    @ anda_skoa: würdest du es bitte probieren

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Tut mir leid, hatte ganz drauf vergessen.

    Habs jetzt ausprobiert:
    Zuerst gings nicht, aber nachdem ich die #include "moc_" aus den Dateien arbeitsfenster.cpp und hauptfenster.cpp rausgenommen hatte und da Makefile gelöscht und neu erzeugt hatte, gings einwandfrei.


    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,
    bin ich blöd oder was?
    welche Qt-Version hast du?

    Ich erhalte trotzdem folgende Fehler:
    Code:
    Temporäre Dateien und Ausgabedateien für "Dienstplaner2 - Win32 Debug" werden gelöscht.
    --------------------Konfiguration: Dienstplaner2 - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    dienst.cpp
    hauptfenster.cpp
    arbeitsfenster.cpp
    Linker-Vorgang läuft...
    hauptfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString  __cdecl Hauptfenster::tr(char const *,char const *)" (?tr@Hauptfenster@@SA?AVQString@@PBD0@Z)
    arbeitsfenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString  __cdecl Arbeitsfenster::tr(char const *,char const *)" (?tr@Arbeitsfenster@@SA?AVQString@@PBD0@Z)
    Debug/Dienstplaner2.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    Dienstplaner2.exe - 3 Fehler, 0 Warnung(en)
    ich denke weiterhin, dass es mit QTranslator zusammenhängt, da er auch Verweise auf tr() vermisst und lupdate, linguist, lrelease nicht mitgeliefert wurden.
    Kann es daran liegen?

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  14. #14
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    hi,
    hab gestern nochmal alle tr()-Befehle durch normale Strings ersetzt und es funktioniert einwandfrei, wenn keiner mehr eine Idee hat wie ich die Fehler beheben kann, muss ich mich wohl auf eine Sprache beschränken oder eine kommerzielle Edition von Qt kaufen.

    Tschau Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

Lesezeichen

Berechtigungen

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