BASE + DERIVED + vector<T> = problem
-
hallo,
ich habe ein problem. folgendes konstrukt sollte selbsterklärend sein, was ich machen will:#include <iostream> #include <vector> using namespace std; template<class T> class BASE { public: BASE() {} BASE(T val) : Value(val) {} ~BASE() {} private: T Value; }; template<class T> class DERIVED : public BASE<T> { public: DERIVED() {} DERIVED(T val) : BASE(val) {} ~DERIVED() {} }; int main() { vector<DERIVED<int> > test; test.push_back(DERIVED(10)); return 0; }
die fehlermeldung lautet:
error C2440: 'type cast' : 'const int' kann nicht in 'class DERIVED' konvertiert werden. Der Zieltyp besitzt keinen Konstruktor.trotz eindeutiger fehlermeldung werde ich daraus nicht schlau
wahrscheinlich irgendeine kleinigkeit oder ich steh momentan auf der leitung...
danke im voraus.
-
#include <iostream> #include <vector> using namespace std; template<class T> class BASE { public: BASE() {} BASE(T val) : Value(val) {} ~BASE() {} private: T Value; }; template<class T> class DERIVED : public BASE<T> { public: DERIVED() {} DERIVED(T val) : BASE<T>(val) {} // <T> für BASE hat gefehlt ~DERIVED() {} }; int main() { vector<DERIVED<int> > test; test.push_back(DERIVED<int>(10)); // Typ muss angegeben werden return 0; }
Wieso das nun so ist weiß ich auch nicht. Aber so funktionierts.
-
thx
-
@Dr.Greenthumb: Wieso weißt du nicht, wieso es so passt? Woher soll denn DERIVED wissen welchen Typ es verwendet? Natürlich muss beim Aufrufen des Konstruktors mit: DERIVED<Typ>(TypVariable) der Typ schon fix stehen.
MfG SideWinder
-
// grad 'nen Denkfehler erkannt