template klasse
-
template <class T> class testbase { protected: T m_var; public: testbase() {}; ~testbase() {}; }; class test: public testbase<int> { public: test(): m_var(0) {}; // fehler, m_var is not a base or member ~test() {}; int get() {}; };kann man m_var nicht in initialisierungsliste initialisieren?
-
T ist die Templateklasse, also:
template <class T> class testbase { protected: T m_var; public: testbase() {}; ~testbase() {}; }; template <class T> class test: public testbase<T> { public: test(): m_var(0) {}; ~test() {}; int get() {}; };
-
m_var gehört zu testbase<>. Die Initialisierung von m_var via Initialisierungsliste kann nur im Konstruktor von testbase<> erfolgen. Du kannst aber einen entsprechenden Konstruktor dort anlegen und den von test aus aufrufen:
template <class T> class testbase { protected: T m_var; // destruktor entweder protected machen... // ~testbase() {} public: explicit testbase(T const& x) : m_var(x) {} // ...oder public und virtual virtual ~testbase() {} }; class test: public testbase<int> { public: test(): testbase(0) {} // ~test() {} // brauchen wir nicht! int get() const {return this->m_var;} };Aber: public inheritance wird bei Dir scheinbar nicht gebraucht. Sonst hättest Du noch ein paar mehr (eventuell virtuelle) Funktionen in testbase<> drin. Wenn Du hier keine Polymorphie brauchst, lass das einfach mit der Vererbung. Du kannst ja auch ein testbase<int> als Element in test anlegen (oder privat von Erben, wenn's unbedingt sein muss).
-
Kóyaánasqatsi schrieb:
T ist die Templateklasse, also: [...]
Was hat das bitte schön mit dem Problem zu tun?
-
sososo schrieb:
m_var gehört zu testbase<>. Die Initialisierung von m_var via Initialisierungsliste kann nur im Konstruktor von testbase<> erfolgen. Du kannst aber einen entsprechenden Konstruktor dort anlegen und den von test aus aufrufen:
template <class T> class testbase { protected: T m_var; // destruktor entweder protected machen... // ~testbase() {} public: explicit testbase(T const& x) : m_var(x) {} // ...oder public und virtual virtual ~testbase() {} }; class test: public testbase<int> { public: test(): testbase(0) {} // ~test() {} // brauchen wir nicht! int get() const {return this->m_var;} };Aber: public inheritance wird bei Dir scheinbar nicht gebraucht. Sonst hättest Du noch ein paar mehr (eventuell virtuelle) Funktionen in testbase<> drin. Wenn Du hier keine Polymorphie brauchst, lass das einfach mit der Vererbung. Du kannst ja auch ein testbase<int> als Element in test anlegen (oder privat von Erben, wenn's unbedingt sein muss).
n1 loesung, vielen dank, dein code sieht sehr ordentlich aus, profi coder wat