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 per T 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.


Anmelden zum Antworten