Forum: PC-Programmierung Frage zu Build Error MSVC 2019


von Vudoh (Gast)


Lesenswert?

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?

von Vudoh (Gast)


Lesenswert?

Kann keiner Hilfestellung bieten?

von Oliver S. (oliverso)


Lesenswert?

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
von Vudoh (Gast)


Lesenswert?

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.

von ljkaunidas (Gast)


Lesenswert?

Tippe auf fehlende include guards in einer der Header Dateien.

von ljkaunidas (Gast)


Lesenswert?

Oder eine C Headerdatei nicht innerhalb extern "C" in einer C++ Datei 
inkludiert.

von vn nn (Gast)


Lesenswert?

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?

von Vudoh (Gast)


Lesenswert?

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.

von Vudoh (Gast)


Lesenswert?

Würde sich evtl. jemand bereit erklären sich mein Visual Studio Projekt 
anzuschauen? Ich würde es per Mail schicken.

von Oliver S. (oliverso)


Lesenswert?

Stell einfach dein Testprogramm als Anhang hier ein. So lang kann das ja 
nicht sein.

Oliver

von Vudoh (Gast)


Lesenswert?

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.

von Vudoh (Gast)


Lesenswert?

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.

von Vudoh (Gast)


Angehängte Dateien:

Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?

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

von Vudoh (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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
Noch kein Account? Hier anmelden.