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
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.
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.
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
intmain()
7
{
8
usingnamespaceGraph_lib;
9
10
Pointtl(150,150);
11
Simple_windowwin(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