LNK2019, weiß nicht wo der fehler sein soll
-
nur die deklaration der operatoren ist im header, die definition ist in der cpp
-
wieso muss die definition in den header rein?
-
die definition muss aber auch in den Header, wegen den Templates.
Zur Vollständigkeit: Es gibt noch das export-Schlüsselwort, dass allerdings fast kein Compiler unterstützt
-
ok, hab die array.cpp am ende der array.h includet, jetzt funktioniert es
-
Begründung:
Templates erzeugen keine Symbole, ergo kann der Linker auch keine finden können. Erst Funktionen und Klassen erzeugen Symbole, und die entstehen erst, wenn das Template instanziert wird. Wenn das Template instanziert wird, muss der Compiler natürlich dessen komplette Definition kennen.
-
jetzt hab ich in nem anderen projekt aber noch ein anderes problem:
string.obj : error LNK2001: unresolved external symbol "public: __thiscall cobject::~cobject(void)" (??1cobject@@QAE@XZ)cobject ist dabei eine basisklasse aller meiner selbstdefinierten klassen.
-
das eigenartige ist hier, wenn ich die definitionen von cobject aus der cpp file in die header file reinnehme und als inline definiere dann kommt der fehler nicht mehr. kann mir das jemand erklären?
-
meine erklärung dafür ist dass generics in c++ scheiße gelöst sind *g*
-
Vevusio schrieb:
meine erklärung dafür ist dass generics in c++ scheiße gelöst sind *g*
1. Templates != Generics
2. Irrelevant, da cObject vermutlich kein template ist
3. Alternativvorschläge?
-
weder cobject noch cstring sind templates.
cobject macht eigentlich nichts anderes als über einen static member zu zählen wieviel objekte es gibt, die von cobject abgeleitet sind.
ich hab wie gesagt die definitionen von cobject als inline funktionen in die header mit reingenommen und es funktioniert, allerdings hab ich keinen blassen schimmer woran das liegt. würde mich sehr interessieren was der grund dafür ist.