Template Classes - Function definition in seperate file
-
Genau das hatte ich vor.
Mir ist allerdings unklar wie die Syntax aussehen muss in dem seperaten header-file.
Mein seperates header-file sieht so aus:
// sphere3d.inl template <typename T> T Sphere3D::surface() {return radius * 10;} template <typename T> T Sphere3D::volume() {return radius / 10;}Das scheint aber falsch zu sein. Könntest du mir bitte den Code für eine der beiden Methoden geben? Ich hänge da gerade etwas fest.
-
template <typename T> T Sphere3D<T>::surface() {return radius * 10;} template <typename T> T Sphere3D<T>::volume() {return radius / 10;}
-
Das ist merkwürdig... ich hatte den Code auch genau so und trotzdem hatte es nicht funktioniert.
Vielen Dank euch, jetzt weiss ich zumindest, dass das .inl-file korrekt ist. Dann muss ich wohl sonstwo noch Fehler suchen.
Danke euch.
-
Hast du den include im Header gemacht?
-
Jop, hier die inlucdes:
#include <iostream> #include <string> #include "sphere3d.inl"*Edit
Die Fehlermeldung:error C2653: 'Sphere3D' : is not a class or namespace name
(Gibt noch ne zweite, die identisch ist)
-
Den include musst du NACH der Klassenbeschreibung machen.
-
Ou, das habe ich ja ganz vergessen
Aber jetzt funktionierts 
Danke für die Hilfe.
-
Ich habe mir das ganze nochmal überlegt und mich gefragt wiso die #includes am Ende des files kommen müssen.
Ich habe mir das so erklärt, dass zuerst die Prototypen der Funktionen bekannt sein müssen, bevor die implementierte Funktion geladen wird.
Stimmt das so in etwa? Wie werden header-files eigentlich geladen? Durch die Laufzeitumgebung? Weil sie werden ja nicht kompiliert.
-
icarus2 schrieb:
Ich habe mir das so erklärt, dass zuerst die Prototypen der Funktionen bekannt sein müssen, bevor die implementierte Funktion geladen wird.
Nicht geladen, aber definiert.
icarus2 schrieb:
Weil sie werden ja nicht kompiliert.
Doch, werden sie.
-
Also stimmt meine Aussage, wenn man die richtigen Begriffe einsetzt? ^^
Ich dachte header-files werden nicht kompiliert, weil man bei der IDE Visual C++ nicht einzeln header-files kompilieren kann.
-
icarus2 schrieb:
Ich dachte header-files werden nicht kompiliert, weil man bei der IDE Visual C++ nicht einzeln header-files kompilieren kann.
Doch, sie werden auch kompiliert. Allerdings geschieht das indirekt, indem sie über die .cpp-Dateien inkludiert werden.
Vor dem eigentlichen Kompiliervorgang tut der Präprozessor sein Werk. Der löst unter anderem die Präprozessordirektiven (
#include,#define,#ifdefetc.) auf und ersetzt Makros. Bei#includewird gerade der gesamte Inhalt der angegebenen Headerdatei an die Stelle im Code gesetzt, wo die#include-Direktive steht. Wenn der Compiler beginnt, weiss er nichts mehr über Headerdateien, sondern kompiliert lediglich eine oder mehrere (vergrösserte) Implementierungsdateien.
-
Achso, jetzt ist mir klar, warum header-files nicht einzeln kompiliert werden können.
Danke für die Info.