Template frage



  • Nehmen wir an ich habe ein Container mit elementen, diese elemente enthalten objekte (T):

    template<class T>
    class Elem{
    
     T Data;
    };
    
    template<class T>
    class Container{
    
     std::list< Elem<T> > DATA;
    };
    

    wieso muss ich nun vor jeder klasse "template<class T>" schreiben, weis der kompiler nich das beide klassen damit gemeint sind??

    grüße



  • BorisDieKlinge schrieb:

    wieso muss ich nun vor jeder klasse "template<class T>" schreiben, weis der kompiler nich das beide klassen damit gemeint sind??

    Du musst das nicht vor "jede Klasse" schreiben. Nur dort, wo du Elem oder Container benutzt, und dich nicht auf ein T festlegen willst.



  • hmm ok .. ich hab noch nich viel mit templates gemacht, und möchte einen baum container implementieren. Dabei habe ich eine Klasse MyTree, welche die Baum struktur repräsentiert, und eine Klasse MyNode, welche die knoten repräsentieren. Problem ist nun das der Knoten typenunabhäng sein soll.. wie müsste da als Template aussen:

    MyTree<TYP_X> Baum; //dabei wird der Wurzelknoten (MyNode) angelegt
    
    MyNode o= Baum.add(TYP_X);  //Kindknoten der Wurzel anfügen
    
    o.add(TYP_X); // Enkelknoten anfügen
    

    usw.:

    das ganze funktioniert schon allerding nich als Template...



  • "Funktioniert nich" ist keine ausreichende Fehlerbeschreibung.



  • MyNode o= Baum.add(TYP_X);  //Kindknoten der Wurzel anfügen
    
    o.add(TYP_X); // Enkelknoten anfügen
    

    Was soll das denn? Du kannst doch keine Typen zu deinem Baum hinzufüge, sonder nur Instanzen.



  • Versuchs mal, mit Node<T>, wenn du MyTree<T> hast. Und dann wuerd ich nochmal das Design ueberdenken, denn du scheinst sowohl fuer den Baum als auch fuer die Nodes die Methode add() definiert zu haben. Lass das entweder den Baum alleine machen, oder du bist konsequent und laesst dir vom baum nur den root-node geben um damit add() auszufuehren.


Anmelden zum Antworten