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.


Anmelden zum Antworten