Reality Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Hallöchen, ich bin momentan dabei, vom qt-tutorial ( http://doc.trolltech.com/3.3/tutorial1-08.html ), die Beispiel-Aufgaben durchzuarbeiten. Und ab da, wo es mehrere Files gibt, kann ich nichts mehr kompilieren. Bei Kapitel 8 zum Beispiel (siehe link) kommen mehrere solcher: testqt error LNK2005: "public: __thiscall MyWidget::MyWidget(class QWidget *,char const *)" (??0MyWidget@@QAE@PAVQWidget@@PBD@Z) already defined in lcdrange.obj Fehlermeldungen. Ich versteh so langsam nicht mehr womit das zusammen hängt, für mich sind das böhmische dörfer. Mit der Support seite von MSDN komm ich auch nicht so wirklich klar. Hat jemand so ne meldung schon mal gehabt, und wenn ja woran liegt das? Eigentlich sollten doch solche Aufgaben in tutorials keine fehlermeldungen ausspucken, oder? Oder wäre es möglich dass man im VisualStudio bestimmte einstellungen treffen muss? Bitte helft mir, ich weiß solangsam nicht mehr weiter. Mfg, Reality Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Moin, gib doch bitte etwas mehr Infos. Die Beispiele aus dem Tutorial funktionieren ansich allesamt. Verrate doch mal etwas mehr ueber deine Vorgehensweise, deinem Compiler usw. Goos Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 Ok, also ich habe ein Projekt angelegt, die 3 cpp-Files in einem "Source-Files" ordner angelegt und die 2 Header Files in einem "Header-Files" ordner angelegt. Ich benutze VisualStudio2003. Die Files sind allesamt im Debug-Ordner des Projektes gespeichert. Hmmm... musst du sonst noch was wissen? Zitieren
Klotzkopp Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Das kann nicht alles sein, was du gemacht hast. Der Fehlermeldung zufolge ist irgendwie der MyWidget-Konstruktor in lcdrange.cpp gelandet. Und da er in main.cpp wohl auch noch drin ist, beschwert sich der Linker. Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 In den Tutorial Ordnern liegt jeweils auch ein *.dsp File. Oeffne das mal mit deinem Visual-Studio und klick dann dort beim Oeffnen auf konvertieren. Auf diese Weise kannst bei den Tutorials fast nix falsch machen. Goos Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 @Klotzkopp: Nein ich hab die Dateien nur so erstellt und den Text aus dem Tutorial kopiert und eingefügt, und dann wollte ich es eben kompilieren... Braucht man vielleicht bestimmte Projekt-Einstellungen, damiit die Sache funktioniert? @Goos: Ich finde in dem Tutorial keine *.dsp-Datei, bist du dir sicher, dass bei diesem Tutorial eine/mehrere dabei sind? Zitieren
Klotzkopp Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Zeig doch mal deine lcdrange.cpp. Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 #include <qapplication.h> #include <qpushbutton.h> #include <qlcdnumber.h> #include <qfont.h> #include <qlayout.h> #include "lcdrange.h" #include "cannon.h" class MyWidget: public QWidget { public: MyWidget( QWidget *parent=0, const char *name=0 ); }; MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { QPushButton *quit = new QPushButton( "Quit", this, "quit" ); quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); LCDRange *angle = new LCDRange( this, "angle" ); angle->setRange( 5, 70 ); CannonField *cannonField = new CannonField( this, "cannonField" ); connect( angle, SIGNAL(valueChanged(int)), cannonField, SLOT(setAngle(int)) ); connect( cannonField, SIGNAL(angleChanged(int)), angle, SLOT(setValue(int)) ); QGridLayout *grid = new QGridLayout( this, 2, 2, 10 ); //2x2, 10 pixel border grid->addWidget( quit, 0, 0 ); grid->addWidget( angle, 1, 0, Qt::AlignTop ); grid->addWidget( cannonField, 1, 1 ); grid->setColStretch( 1, 10 ); angle->setValue( 60 ); angle->setFocus(); } int main( int argc, char **argv ) { QApplication a( argc, argv ); MyWidget w; w.setGeometry( 100, 100, 500, 355 ); a.setMainWidget( &w ); w.show(); return a.exec(); } Oben steht aber auch nochmal der Link von dem Tutorial, da kannst du zur not auch nachsehen, weil ich hab wirklich alles einfach nur 1 zu 1 rüberkopiert Zitieren
Klotzkopp Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 ich hab wirklich alles einfach nur 1 zu 1 rüberkopiert Soso. Warum steht dann in der lcdrange.cpp auf der verlinkten Webseite etwas völlig anderes? Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 Ohje, peinlich peinlich, gut jetzt habe ich nochmal alles überprüft, aber das war ja nicht die einzige fehlermeldung, hab jetzt die anderen mal alle noch zusammengestellt: testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall LCDRange::qt_property(int,int,class QVariant *)" (?qt_property@LCDRange@@UAE_NHHPAVQVariant@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall LCDRange::qt_emit(int,struct QUObject *)" (?qt_emit@LCDRange@@UAE_NHPAUQUObject@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall LCDRange::qt_invoke(int,struct QUObject *)" (?qt_invoke@LCDRange@@UAE_NHPAUQUObject@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual void * __thiscall LCDRange::qt_cast(char const *)" (?qt_cast@LCDRange@@UAEPAXPBD@Z) testqt error LNK2001: unresolved external symbol "public: virtual char const * __thiscall LCDRange::className(void)const " (?className@LCDRange@@UBEPBDXZ) testqt error LNK2019: unresolved external symbol "public: static class QMetaObject * __cdecl LCDRange::staticMetaObject(void)" (?staticMetaObject@LCDRange@@SAPAVQMetaObject@@XZ) referenced in function "public: virtual class QMetaObject * __thiscall LCDRange::metaObject(void)const " (?metaObject@LCDRange@@UBEPAVQMetaObject@@XZ) testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall CannonField::qt_property(int,int,class QVariant *)" (?qt_property@CannonField@@UAE_NHHPAVQVariant@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall CannonField::qt_emit(int,struct QUObject *)" (?qt_emit@CannonField@@UAE_NHPAUQUObject@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual bool __thiscall CannonField::qt_invoke(int,struct QUObject *)" (?qt_invoke@CannonField@@UAE_NHPAUQUObject@@@Z) testqt error LNK2001: unresolved external symbol "public: virtual void * __thiscall CannonField::qt_cast(char const *)" (?qt_cast@CannonField@@UAEPAXPBD@Z) testqt error LNK2001: unresolved external symbol "public: virtual char const * __thiscall CannonField::className(void)const " (?className@CannonField@@UBEPBDXZ) testqt error LNK2019: unresolved external symbol "public: static class QMetaObject * __cdecl CannonField::staticMetaObject(void)" (?staticMetaObject@CannonField@@SAPAVQMetaObject@@XZ) referenced in function "public: virtual class QMetaObject * __thiscall CannonField::metaObject(void)const " (?metaObject@CannonField@@UBEPAVQMetaObject@@XZ) testqt error LNK2019: unresolved external symbol "protected: void __thiscall CannonField::angleChanged(int)" (?angleChanged@CannonField@@IAEXH@Z) referenced in function "public: void __thiscall CannonField::setAngle(int)" (?setAngle@CannonField@@QAEXH@Z) testqt fatal error LNK1120: 13 unresolved externals jetzt guckste, was *g* Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 @Goos: Ich finde in dem Tutorial keine *.dsp-Datei, bist du dir sicher, dass bei diesem Tutorial eine/mehrere dabei sind? Jo, in deinem %QTPath%\tutorial\t8 gibts ne t8.dsp Goos Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 testqt fatal error LNK1120: 13 unresolved externals jetzt guckste, was *g* Du musst deine Header-Files noch mocen Deshalb waers auch einfacher, wenn du die dsp Files verwenden wuerdest, da is das schon dabei. Ansonsten in den Settings deiner Header Files in etwa folgendes hinzufuegen: $(QTDIR)\bin\moc cannon.h -o tmp\moc\release_mt_static\moc_cannon.cpp Das erzeugt dir dann ein moc_cannon.cpp File welches du auch noch mit ins Projekt nehmen musst. Ebenso ist mit lcdrange zu verfahren. Goos Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 Du musst deine Header-Files noch mocen Was ist mocen? *g* Deshalb waers auch einfacher, wenn du die dsp Files verwenden wuerdest, da is das schon dabei. Wo find ich denn die dsp-Files, ich hatte schon geschaut, find aber nix... Vielleicht kannst mir ja nen kleinen Tipp geben !?:hells: Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Was ist mocen? *g* Ui, du bist ganz neu bei QT http://doc.trolltech.com/3.3/moc.html Wo find ich denn die dsp-Files, ich hatte schon geschaut, find aber nix... Vielleicht kannst mir ja nen kleinen Tipp geben !?:hells: Die dsp-Files findest wie schon gesagt in deiner lokalen QT Installation im entsprechenden Tutorial Ordner. Kann allerdings auch sein, dass diese Files bei der freien Version nicht dabei sind. Du solltest dir auf jeden Fall zuerstmal noch qmake anschaun. http://doc.trolltech.com/3.3/qmake-manual.html Goos Zitieren
Reality Geschrieben 18. Mai 2006 Autor Geschrieben 18. Mai 2006 Wow dankeschön. Naja, ich hätte vielleicht dazuschreiben sollen, dass ich in Qt neuling bin Zitieren
Goos Geschrieben 18. Mai 2006 Geschrieben 18. Mai 2006 Es gibt uebrigens auch noch ein deutsches Qt-Forum in dem du wahrscheinlich allein durch die Suche fast alle deiner Probleme loesen kannst. Goos Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.