Template-Klasse: wird nicht erkannt
-
Hallo Leute! Ich bekomme meine Template-Klasse einfach nicht zu Laufen. Es gibt keine Compiler-Errors, doch sobald ich ein Objekt erzeuge, erkennt er es nicht (left of .function() must have class/... usw.).
Ich habe folgenden Quelltext:
(soll eine Klasse werden, die zeiger auf irgendeinen typen verwalten kann).//Base.h template <typename T, int SLOTS> class cDB { private: T *item[SLOTS]; string name[SLOTS]; //Functions: public: cDB() {empty();} ~cDB() {empty();} T* get(string name); int reg(string name, T *item); void erase(string name); void empty(); private: int get_empty_slot(); }; //Base.cpp #include "Base.h" template<typename T, int SIZE> T* cDB<T, SIZE>::get(string name) { } template<typename T, int SIZE> int cDB<T, SIZE>::reg(string name, T *item) { } template<typename T, int SIZE> void cDB<T, SIZE>::erase(string name) { } template<typename T, int SIZE> void cDB<T, SIZE>::empty() { } template<typename T, int SIZE> int cDB<T, SIZE>::get_empty_slot() { } //main.cpp #include "Base.h" int main() { cDB<int, 10> db(); //bis hierher meckert er nicht db.empty(); //wenn ich diese zeile hinzufüge, kommt besagter Fehler //er zeigt mir auch bei db. keine Vorschläge für Funktionen return 0; }
Ich bin ehrlichgesagt schon ziemlich ratlos...
Könnt ihr mir helfen?
-
du darfst templates nicht in .cpp und .h dateien trennen da sie in der implementierungseinheit in der du sie benutzen willst bekannt sein müssen (im klartext: den kompletten code in die header haun).
Es gibt für sowas zwar ein schlüsselwort "export", aber ich glaub das unterstützt gerade mal ein Compiler ...
-
Es geht immer noch nicht.
Im ClassView werden gerade mal Konstruktor und Konstruktor erkannt, sprich die einzigen die nicht außerhalb definiert wurden. Außerdem erkennt er db.empty(); immer noch nicht.
Das mit Templates funktioniert ja mal GAR NICHT!
Trotzdem danke für deine Antwort.
-
mach aus:
cDB<int, 10> db();
das hier:
cDB<int, 10> db;
muss jetz weg, für erklärungen keine zeit sry
ciao
-
Danke! Es funktioniert!
Nur, wenn ich keine Klammern hinmachen darf, wie kann ich dann das ganze mit einem parametrisierten Konstruktor machen?
-
the_template schrieb:
Nur, wenn ich keine Klammern hinmachen darf, wie kann ich dann das ganze mit einem parametrisierten Konstruktor machen?
Dann darfst du Klammern hinmachen. Aber nur dann.