Templates in Funktionen
-
Hi! Bisher habe ich Templates nur in meinen Klassen benutzt, nun ist es aber an der Zeit wo ich sie auch in Funktionen benutzen muss. Nun will das aber nicht so wie ich es will. Ich habe die Funktion in einer Header Datei deklariert und in einer Cpp Datei definiert. Nun bekomme ich aber beim debuggen ein linker error:
Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""class Vec3<float> __cdecl Vec3Cross<float>(class Vec3<float>,class Vec3<float>)" (??Vec3@M@@V0@0@Z)" in Funktion "_WinMain@16".
C:\Devia\Devia-Engine\Debug\Devia-Engine.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Mein Code sieht so aus:
// Header Datei template <class T> Vec3<T> Vec3Cross(Vec3<T> v0, Vec3<T> v1); // Cpp Datei template <class T> Vec3<T> Vec3Cross(Vec3<T> v0, Vec3<T> v1) { Vec3<T> cross; cross.X = a.Y * b.Z - a.Z * b.Y; cross.Y = a.Z * b.X - a.X * b.Z; cross.Z = a.X * b.Y - a.Y * b.X; return cross; }Ich verstehe nicht warum das nicht funktioniert.
-
Auch bei Funktionen muss die Definition in der Header-Datei stehen

-
template definitionen müssen immer im header stehen
dat.h
// deklaration #include "dat.cpp"meist nennt man die datei dann .impl
MfG helferlein
:xmas1:
-
Das find ich mies! Giebt es keine möglichkeit die Funktionsdeklaration im Header und die definition in einer Cpp Datei zu haben?
Edist::
Achso, dann muss ein eifach in der Header Datei die Cpp Datei includen?
-
Code-Walker schrieb:
Das find ich mies! Giebt es keine möglichkeit die Funktionsdeklaration im Header und die definition in einer Cpp Datei zu haben?
Edist::
Achso, dann muss ein eifach in der Header Datei die Cpp Datei includen?
Giebt....

Naja - im grunde genommen ist das richtig, allerdings solltest du sie dann nicht mehr dem Projekt hinzufügen - und da das keiner Wissen kann und sich dann wundert, wenn er es doch macht, nennt man in diesem Fall die *.cpp Datei *.impl..bb
-
Code-Walker schrieb:
Achso, dann muss ein eifach in der Header Datei die Cpp Datei includen?
Dann beachte aber ein paar Punkte:
1. Kein using namespace (Die Regel für Header gilt auch für alle includierten Einheiten).
2. (Wie schon genannt) möglichst nicht .cpp sondern z.B. .impl nennencu André
-
Du kannst auch mal in den FAQ rumstöbern oder im Forum suchen, die Thematik taucht relativ oft auf. Stichwort:
export.