Eigene Klasse als template-Klasse übergeben
-
Hallo,
ich hab zwei Klassen:
class myclass{...}; template <typename T>class mytclass{...};Jetzt möchte ich mytclass mit myclass als T verwenden, also so:
mytclass<myclass> mtc;Allerdings bekomm ich da eine Exception, dass kein geeigneter Standardkonstruktor verfügbar ist. Was muss ich tun,damit das funktioniert?
Als T sollen Typen wie int,double oder eigene Klassen möglich sein.
-
das liegt dann daran dass du in deinem template versuchst deine klasse mit einem konstruktor (in dem fall den std konstruktor) instantiieren obwohl der nicht für deine klasse definiert ist
-
Was du bekommst ist keine Exception sondern ein Compilerfehler. Und der liegt entweder daran was Skym0sh0 gesagt hat oder daran dass dein template keinen Default-Konstruktor definiert.
-
Am besten so.
{...}
-
ok, meine Klasse hat keinen std Konstruktor sondern einen mit zwei Parametern
class myclass { ... public: myclass(double value1,double value2); ... }Wie muss ich meinen Code ändern damit der damit funktioniert?
Oder geht das generell nur mit einem std Konstruktor?
-
Der Template-Parameter muß alle Operationen/Funktionen unterstützen, die im Template verwendet werden. Wenn du zwei Objekte miteinandervergleichst, brauchst du einen
operator==, wenn du ein Objekt perT tmp;anlegst, brauchst du einen Default-Konstruktor.
Das heißt, entweder du baust das Template so um, daß keine Default-Konstruktion notwendig wird, oder du spendierst der übergebenen Klasse einen Default-Konstruktor.