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


Anmelden zum Antworten