[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 1Wenn 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 1Weiß 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
