LNK2001/2019 - RPG Penguine Programmer tutorial
-
Liebe C++ Community,
ich versuche mich gerade am Penguine Programmer RPG tutorial. http://www.penguinprogrammer.co.uk/rpg-tutorial/introduction/.
Mein Problem sind ca. 120 LNK2001 u. LNK2019 Fehler. Alle im Zusammenhang mit JsonBox. Laut Tutorial wird eine JsonBox library mit Cmake erstellt und im Anschluss eingebunden. Eine Alternative dazu:Without Building the Library
If you run into trouble installing the library then you can include it directly by downloading JsonBox and copying both the include and src folders into your project, then replacing all instances of #include <JsonBox/something.h> with #include "JsonBox/something.h" so the compiler knows where to find the header files. Your project layout should then look likeproject/ |-> src/ |-> Array.cpp |-> other-jsonbox-files |-> main.cpp |-> other-tutorial-files |-> JsonBox/ |-> Array.h |-> other-jsonbox-headers
Now you can compile the project as usual, and you won’t have to link the library (although compilation times will be much higher).
Gemacht, getan. Im Projekt einen Filter für src/ Dateien und Jsonbox/ Dateien angelegt und diese dann hinzugefügt. #include "" habe ich sowieso benutzt.
Leider immer wieder diese LNK2019,LNK2001 Fehler, gegoogled habe ich ebenfalls, Verweisfehler, die meist beim falschen linken einer Bibliothek entstehen. Leider benutz ich in diesem Fall keine Bibliothek und weiss daher nicht ganz was mir entgeht. Eigentlich sollte #include ja ausreichen?Die Bibliothek nutze ich nicht da mir Cmake ebenfalls fehler ausgibt.
Ich nutze Visual Express 2015, allerdings auch schon mit QT probiert, ähnliche Fehleranzahl.area.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Value@JsonBox@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)" in Funktion ""public: class JsonBox::Object __thiscall Area::getJson(void)" (?getJson@Area@@QAE?AVObject@JsonBox@@XZ)". creature.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Value@JsonBox@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)". inventory.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Value@JsonBox@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)". player.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Value@JsonBox@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)". area.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(int)" (??0Value@JsonBox@@QAE@H@Z)" in Funktion ""public: class JsonBox::Object __thiscall Area::getJson(void)" (?getJson@Area@@QAE?AVObject@JsonBox@@XZ)". creature.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(int)" (??0Value@JsonBox@@QAE@H@Z)". inventory.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(int)" (??0Value@JsonBox@@QAE@H@Z)". player.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(int)" (??0Value@JsonBox@@QAE@H@Z)". area.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Array const &)" (??0Value@JsonBox@@QAE@ABVArray@1@@Z)" in Funktion ""public: class JsonBox::Object __thiscall Area::getJson(void)" (?getJson@Area@@QAE?AVObject@JsonBox@@XZ)". inventory.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Array const &)" (??0Value@JsonBox@@QAE@ABVArray@1@@Z)". area.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Value const &)" (??0Value@JsonBox@@QAE@ABV01@@Z)" in Funktion ""public: __thiscall Dialogue::Dialogue(class JsonBox::Value &)" (??0Dialogue@@QAE@AAVValue@JsonBox@@@Z)". entity_manager.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Value const &)" (??0Value@JsonBox@@QAE@ABV01@@Z)". inventory.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Value const &)" (??0Value@JsonBox@@QAE@ABV01@@Z)". player.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::Value(class JsonBox::Value const &)" (??0Value@JsonBox@@QAE@ABV01@@Z)". player.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::~Value(void)" (??1Value@JsonBox@@QAE@XZ)" in Funktion "__unwindfunclet$??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@VValue@JsonBox@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@VValue@JsonBox@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@VValue@JsonBox@@@std@@@std@@@1@@Z$0". weapon.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::~Value(void)" (??1Value@JsonBox@@QAE@XZ)". entity_manager.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall JsonBox::Value::~Value(void)" (??1Value@JsonBox@@QAE@XZ)".
Ich wäre über jede Antwort dankbar!
Danke fürs lesen!
-
Linkerfehler haben nichts mit #include zu tun (dann kämen schon Fehler während des Kompilierens).
Hast du wirklich alle JsonBox-Dateien als Source zu deinem Projekt hinzugefügt? Anscheinend fehlt ja die Klasse JsonBox::Value - und diese sollte per Einbinden von Value.cpp kompiliert werden können, so daß dann auch die Linkerfehler verschwinden.
-
Danke für die Antwort!
Es war tatsächlich ein Problem mit fehlenden Dateien, unter Anderem die Value.cpp.
Problem war, dass das Tutorial mit einer älteren Version von JsonBox arbeitet und somit einige Dateien bei meinem Download nicht vorhanden waren.
Leider geht's jetzt weiter..weapon.cpp c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\array.h(18): error C2371: "JsonBox::Array": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(697): note: Siehe Deklaration von "JsonBox::Array" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\object.h(19): error C2371: "JsonBox::Object": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(703): note: Siehe Deklaration von "JsonBox::Object" c:\users\\documents\visual studio 2015\projects\test\test\src\weapon.cpp(22): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\weapon.cpp(22): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig player.cpp c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\array.h(18): error C2371: "JsonBox::Array": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(697): note: Siehe Deklaration von "JsonBox::Array" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\object.h(19): error C2371: "JsonBox::Object": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(703): note: Siehe Deklaration von "JsonBox::Object" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(32): warning C4018: "<": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(42): warning C4018: "<=": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(63): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(63): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(55): warning C4244: "=": Konvertierung von "double" in "float", möglicher Datenverlust c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(56): warning C4244: "=": Konvertierung von "double" in "float", möglicher Datenverlust c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(61): warning C4244: "Initialisierung": Konvertierung von "double" in "float", möglicher Datenverlust c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(96): error C2664: "JsonBox::Value::Value(const JsonBox::Value &)" : Konvertierung von Argument 1 von "JsonBox::Object" in "std::istream &" nicht möglich c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(104): error C2679: Binärer Operator "=": Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ "JsonBox::Object" akzeptiert (oder keine geeignete Konvertierung möglich) c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(204): note: kann "JsonBox::Value &JsonBox::Value::operator =(bool)" sein c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(197): note: oder "JsonBox::Value &JsonBox::Value::operator =(const JsonBox::Value::Array &)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(190): note: oder "JsonBox::Value &JsonBox::Value::operator =(const JsonBox::Value::Object &)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(183): note: oder "JsonBox::Value &JsonBox::Value::operator =(double)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(176): note: oder "JsonBox::Value &JsonBox::Value::operator =(int)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(169): note: oder "JsonBox::Value &JsonBox::Value::operator =(const char *)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(162): note: oder "JsonBox::Value &JsonBox::Value::operator =(const std::string &)" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(155): note: oder "JsonBox::Value &JsonBox::Value::operator =(const JsonBox::Value &)" c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(104): note: bei Anpassung der Argumentliste "(JsonBox::Object::mapped_type, JsonBox::Object)" c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(106): error C2664: "JsonBox::Value::Value(const JsonBox::Value &)" : Konvertierung von Argument 1 von "JsonBox::Object" in "std::istream &" nicht möglich c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(120): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(120): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(131): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\player.cpp(131): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig main.cpp c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\array.h(18): error C2371: "JsonBox::Array": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(697): note: Siehe Deklaration von "JsonBox::Array" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\object.h(19): error C2371: "JsonBox::Object": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(703): note: Siehe Deklaration von "JsonBox::Object" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(32): warning C4018: "<": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(42): warning C4018: "<=": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(63): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\dialogue.hpp(63): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\main.cpp(47): warning C4244: "Argument": Konvertierung von "time_t" in "unsigned int", möglicher Datenverlust c:\users\\documents\visual studio 2015\projects\test\test\src\main.cpp(73): warning C4018: "<": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\main.cpp(123): warning C4018: "<=": Konflikt zwischen "signed" und "unsigned" c:\users\\documents\visual studio 2015\projects\test\test\src\main.cpp(127): warning C4018: "<": Konflikt zwischen "signed" und "unsigned" item.cpp c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\array.h(18): error C2371: "JsonBox::Array": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(697): note: Siehe Deklaration von "JsonBox::Array" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\object.h(19): error C2371: "JsonBox::Object": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(703): note: Siehe Deklaration von "JsonBox::Object" c:\users\\documents\visual studio 2015\projects\test\test\src\item.cpp(21): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\item.cpp(21): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig inventory.cpp c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\array.h(18): error C2371: "JsonBox::Array": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(697): note: Siehe Deklaration von "JsonBox::Array" c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\object.h(19): error C2371: "JsonBox::Object": Neudefinition; unterschiedliche Basistypen c:\users\\documents\visual studio 2015\projects\test\test\src\jsonbox\value.h(703): note: Siehe Deklaration von "JsonBox::Object" c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(166): error C2440: "Initialisierung": "const JsonBox::Value::Object" kann nicht in "JsonBox::Object" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(166): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(176): error C2440: "<function-style-cast>": "JsonBox::Array" kann nicht in "JsonBox::Value" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(176): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(177): error C2440: "<function-style-cast>": "JsonBox::Array" kann nicht in "JsonBox::Value" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(177): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(178): error C2440: "<function-style-cast>": "JsonBox::Array" kann nicht in "JsonBox::Value" konvertiert werden c:\users\\documents\visual studio 2015\projects\test\test\src\inventory.cpp(178): note: Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig entity_manager.cpp
usw..
kann doch nicht sein, dass ich mich zu dämlich anstelle um das Projekt zusammenzufügen.. benutze ja nun schon die Dateien aus dem Git um Fehler meinerseits zu minimieren..
Da das Tutorial ansich funktionieren soll, kann der Fehler nur bei mir liegen.
Was mache ich falsch?Git zum Tutorial
https://github.com/Piepenguin1995/cpp-rpg-tutorial
Git jsonBox
https://github.com/anhero/JsonBox