[SOLVED] template problem



  • 'N Abend.

    Habe da ein kleines template Problem, an dem ich nun schon länger kaue.

    Es geht um folgendes:

    // resMgr.h
    
    #include <map>
    #include <string>
    
    template<typename DATA, typename TAG>
    class Handle
    {
    public:
    Handle() { }
    
    // Handle(const std::map<std::string, DATA*>::iterator& it) : _it(it) { }
    
    ~Handle() { }
    
    private:
    std::map<std::string, DATA*>::iteratior _it; // <- fehler?
    };
    

    Die Fehlermeldung vom g++ (4.1.1) besagt:

    [/home/jhg/repositories/util/resMgr.h:17: error: expected ';' before '_it'
    make: *** [test.o] Error 1

    Wenn man den zweiten Konstruktor wieder zu lässt, wird daraus sogar

    /home/jhg/repositories/util/resMgr.h:12: error: expected unqualified-id before '&' token
    /home/jhg/repositories/util/resMgr.h:12: error: expected ',' or '...' before '&' token
    /home/jhg/repositories/util/resMgr.h:12: error: ISO C++ forbids declaration of 'parameter' with no type
    /home/jhg/repositories/util/resMgr.h:17: error: expected ';' before '_itResource'
    /home/jhg/repositories/util/resMgr.h: In constructor 'Handle<DATA, TAG>::Handle(int)':
    /home/jhg/repositories/util/resMgr.h:12: error: class 'Handle<DATA, TAG>' does not have any field named '_it'
    /home/jhg/repositories/util/resMgr.h:12: error: 'it' was not declared in this scope
    make: *** [test.o] Error 1

    Weiß jemand was ich falsch mache?

    Wenn ich im typ der std::map DATA* durch int* ersetze kompiliert g++ in beiden Fällen anstandslos. Nur mit dem template Parameter klappt das nicht.

    Muss ich den iterator oder die map vorher noch irgendwie speziell deklarieren oder sowas?

    Wäre für jeden Hinweis dankbar... 😕



  • typename std::map<std::string, DATA*>::iterator _it;
    

    Du musst deinem Compiler sagen, dass es sich bei iterator um einen Typ handelt, denn das kann er auf Grund der Abhängigkeit von DATA nicht selbst feststellen.



  • Ergebensten Dank 🙂


Anmelden zum Antworten