Hi Leute, ich habe mir FLTK in Visual Studio 2019 eingerichtet und versuche nun ein erstes Testprojekt mit ein paar zusätzlichen externen Headers zum Laufen zu bringen allerdings schlägt der build Vorgang fehl und ich kann mit den Fehlermeldungen nichts anfangen. Eine wäre zB diese hier: 1>GUI.obj : error LNK2005: “class std::mersenne_twister_engine & __cdecl get_rand(void)” (?get_rand@@YAAAV?$mersenne_twister_engine@I$0CA@$0CHA@$0BIN@$0BP@$0JJAI LANP@$0L@$0PPPPPPPP@$06$0JNCMFGIA@$0P@$0OPMGAAAA@$0BC@$0GMAHIJGF@@std@@X Z) ist bereits in Graph.obj definiert. 1>GUI.obj : error LNK2005: “void __cdecl seed_randint(int)” (?seed_randint@@YAXH@Z) ist bereits in Graph.obj definiert. Davon gibt es noch zwei weitere bezogen auf andere obj Dateien (die Fehlermeldungen beziehen sich nur auf die erwähnten externen Files). Was bedeutet das?
Je nun, was ist an der Fehlermeldung unklar? Mal etwas gekürzt steht da: >GUI.obj : error LNK2005: “class std::mersenne_twister_engine & __cdecl > get_rand(void)” ... > ist bereits in Graph.obj definiert. Dein Problem wird sein, daß du versuchst, "ein paar zusätzlichen externen Headers zum Laufen zu bringen". Du weisst nicht, was du tust. Wir wissen nicht, was du tun möchtest. Also erklär das mal etwas ausführlicher. Oliver
:
Bearbeitet durch User
Ich weis nicht wie ich das genauer erklären soll. Mir stellt sich die Frage was die Fehlermeldung bedeutet und wie ich sie beheben kann. Ich könnte die einzelnen Headers hier posten, aber das wäre sicher nicht sinnvoll. Ich will die FLTK Bibliothek in Verbindung mit ein paar externen Headers nurtzen, diese Headers stellen eine zusätzliche Schnittstelle zu FLTK dar.
Oder eine C Headerdatei nicht innerhalb extern "C" in einer C++ Datei inkludiert.
Vudoh schrieb: > Ich > könnte die einzelnen Headers hier posten, aber das wäre sicher nicht > sinnvoll. Und du meinst es ist sinnvoller, einfach gar keine Infos zu posten?
ljkaunidas schrieb: > Tippe auf fehlende include guards in einer der Header Dateien. ljkaunidas schrieb: > Oder eine C Headerdatei nicht innerhalb extern "C" in einer C++ > Datei inkludiert. Danach kann ich mal schauen danke für den Tipp.
Würde sich evtl. jemand bereit erklären sich mein Visual Studio Projekt anzuschauen? Ich würde es per Mail schicken.
Stell einfach dein Testprogramm als Anhang hier ein. So lang kann das ja nicht sein. Oliver
Oliver S. schrieb: > Stell einfach dein Testprogramm als Anhang hier ein. So lang kann das ja > nicht sein. Ich habe eben bemerkt, dass ich eine Datei nicht im Projekt hatte (window.h ist drin, es sollte aber simple_window.h drin sein), jetzt ist mir die Fehlermeldung etwas verständlicher, ich versuche mal ob ich es hinbekomme, ansonsten komme ich auf deinen Vorschlag zurück.
Habe gestern einiges rumprobiert, aber nachdem ich alle Fehlermeldungen beseitigt habe, sind zum Schluss dieselben Meldungen gekommen wie am Eingang des Themas erwähnt. Ist echt frustrierend wenn man ein Buch durcharbeitet, aber Details zur Nutzung der im Buch verwendeten Grafik-Schnittstelle darin nicht gründlich erklärt wird. Dabei ist das Buch eigentlich inhaltlich ziemlich gut. Ich stelle nachher meine main.cpp rein und lade die zugehörigen headers hoch. Vielleicht könnt ihr mir weiterhelfen.
So nachfolgend die versprochenen Dateien. Eine Anmerkung zu "Simple_window.h" und "Simple_window.cpp": Die cpp-Datei wird nicht benötigt, da die Definitionen schon in "Simple_window.h" enthalten sind. Weiter sei noch gesagt, dass für dieses simple Beispiel GUI.h und GUI.cpp nicht benötigt werden, weil es aber in den späteren Buchkapiteln genutzt wird, wurden diese Datein gleich mit eingebunden. Ihr könnt diese gerne weglassen aus der Analyse. Ich weis, dass ich nicht erwarten kann, dass ich da jemand reinwühlt und das ganze analysiert. Aber falls jemand doch Muse hat (es gibt ja Profis die sich in sowas relativ schnell reindenken können. Ich wünschte zu denen würde ich gehören!) wäre ich sehr dankbar dafür. Ich stecke im Buch momentan fest und würde gerne weiterkommen. Natürlich werde ich nicht faul rumliegen und andere um Hilfe bitten, ich werde selbst auch versuchen herauszufinden warum es nicht geht. Auf Wunsch lade ich mein ganzes VS-Projekt hier hoch, dann kann man auch die Projekteinstellungen prüfen, aber da sollten eigentlich keine Fehler drin sein.
1 | /* main.cpp */
|
2 | |
3 | #include "Graph.h" |
4 | #include "Simple_window.h" |
5 | |
6 | int main() |
7 | {
|
8 | using namespace Graph_lib; |
9 | |
10 | Point tl(150, 150); |
11 | Simple_window win(tl, 600, 400, "My window"); |
12 | win.wait_for_button(); |
13 | }
|
Die dahinter hängenden Headerdateien werde ich nicht posten sondern habe sie im Anhang, die sind zu lange um hier zu posten. Folgende Abhängigkeiten liegen vor: 1)main.cpp inkludiert Graph.h 2)Graph.h inkludiert Point.h, fltk.h und std_lib_facilities.h 1)main.cpp inkludiert Simple_window.h 2)Simple_window.h inkludiert GUI.h 3)GUI.h inkludiert window.h und Graph.h
Schau dir die Definition/Deklaration von seed_randint an, und die der Funktionen danach. Finde den Unterschied. Dann nimmst du dein C++-Buch, und versuchst zu verstehen, was da falsch ist, und warum. Oliver
Oliver S. schrieb: > Schau dir die Definition/Deklaration von seed_randint an, und die der > Funktionen danach. Finde den Unterschied. Dann nimmst du dein C++-Buch, > und versuchst zu verstehen, was da falsch ist, und warum. > > Oliver Hallo Oliver, ich habe mich auch noch in anderen Foren umgehört und das Problem liegt genau wie du angedeutet hast daran, dass das Schlüsselwort "inline" fehlt. Nachdem ich die Änderungen vorgenommen habe hat alles sauber funktioniert. An dieser Stelle vielen Dank für deine Hilfe, ich sagta ja, es gibt Profis die sich in sowas schnell reindenken können, von meiner Seite Hut - ab im Ernst. Darauf wäre ich von selbst wohl nicht gekommen, bin aber auch Anfänger. Du sprichst davon in einem C++ Buch nachzulesen, welches würdest du mir konkret empfehlen? Habe gelesen, dass Bücher von Meyers sehr gut sind. Auf alle Fälle danke nochmal für deine Hilfestellung.
Fehlermeldungen vom linker sind eher selten. Die häufigste ist „fehlende Referenz“, danach kommt deine bzgl. „Schon definiert“. Wenn du verstanden hast, was das bedeutet, hast du was gelernt. Oliver
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.