typedef innerhalb von template class
-
Hallo, bei folgendem Code
#include <vector> template <class T> class A{ private: typedef std::vector<int>::iterator intit; struct B { double b; int a; }; typedef std::vector<B>::iterator itB; T a_; public: A(T a): a_(a){} }; int main(){ A<double> aa(3.4); return 0; }Bekomme ich mit g++ 4.1.2 auf Debian etch folgende Fehlermeldung:
test.cpp:12: error: type 'std::vector<A<T>::B, std::allocator<A<T>::B> >' is not derived from type 'A<T>' test.cpp:12: error: expected ';' before 'itB'mit dem Intel 9.1:
test.cpp(12): error: nontype "std::vector<_Tp, _Alloc>::iterator [with _Tp=A<T>::B, _Alloc=std::allocator<A<T>::B>]" is not a type nameIch vermute, dass ich entweder im struct oder im typedef die template class T miterwaehnen muss. Koennte mir jemand sagen, wie die Syntax korrekt lautet?
Vielen Dank.
-
ev. fehlt ein typename..
typedef typename std::vector<B>::iterator
-
Danke, das funktioniert. Koennte mir noch jemand die Syntax erklaeren, um zu verstehen, weshalb es funktioniert?
-
Das ist das Problem der "abhängigen Namen" (kA, ob das genau so heißt).
Wenn du ein Template mit einem Parameter deines Templates spezialisierst und von diesem dann einen Typen benutzen willst, dann musst du dem Compiler sagen, dass es ein Typ ist (oder sein müsste). Schließlich kann das andere Template ja auch eine Spezialisierung haben, die ganz anders aussieht.
Du sagst dem Compiler bescheid, indem du ein "typename" voranstellst.