Template Problem



  • Hallo
    Ich habe folgendes Problem mit meiner Template class.
    Ich habe einen Konstruktoren der wie folgt aussieht

    template <class T>
    heap<T>::heap(const vector<T> stl_vek)
    {
       this->knoten = 0;
       int size = stl_vek.size;
       for(int i = 0; i < size; i++)
       {
    	   insert(stl_vek[i]);
    	   this->anzahl++;
       }
    }
    

    wenn ich mir mit diesem Konstruktor ein Objekt anlege mekert der Compiler
    folgendes
    error C2947: expecting '>' to terminate template-argument-list, found '>>'
    error C2664: 'heap<T>::heap(const heap<T> &)' : cannot convert parameter 1 from 'bla' to 'const heap<T> &'
    Ein Kopie Konstruktor ist auch deklariert nämmlich so

    heap(const heap<T> &a);
    

    und ich erzeuge das Objekt sowohl mit new wie auch direkt mit dem Konstruktor
    nämlich so:

    heap<vector<int>> dddd(vek);
    heap ddd = new heap(vek);
    

    Meine Frage ist warum klappt das nicht



  • template <class T>
    heap<T>::heap(const vector<T> &stl_vek)  //Besser Referenz nehmen
    {
       this->knoten = 0;
       int size = stl_vek.size();  //Ist ne Methode, kein Attribut
       for(int i = 0; i < size; ++i)
       {
    	   insert(stl_vek[i]);
    	   this->anzahl++;
       }
    }
    
    heap< vector<int> > dddd(vek);  //Da muss n Leerzeichen rein, der Compiler denkt sonst, du meinst den >> operator.
    

    MfG

    GPC



  • Du mußt ein Leerzeichen zwischen die beiden > Symbole setzen, sonst werden die als Shift-Operator interpretiert (und der ist an dieser Stelle falsch).



  • Erstmal Danke !!
    Jetzt habe ich folgendes problem der Compiler meldet mir an der gleiche Stelle wo ich den Konstruktor aufrufe
    folgendes
    error C2664: 'heap<T>::heap(const heap<T> &)' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const heap<T> &'

    was soll das heissen und wie krieg ich das weg



  • Hallo?? Hat jemand ne Antwort



  • Ich bin zwar auch kein Experte für Templates, und hab grade keinen Compiler zur Hand, aber dein Compiler will dir mit der Fehlermeldung glaube ich sagen,
    dass er in der einen Zeile implizit deinen Copy-Construktor verwenden will, mit den Argument const heap<T> &. Als Argument gibst du ihm dann aber einen std::vector<int>, und er kennt keine Typumwandlung von nach std::vector<_Ty>
    const heap<T> &.

    Vieleicht funktioniert's, wenn du ihm explizit sagst, dass er nicht den Copy
    Konstruktor, sondern den anderen mit Argument const vector<T> verwenden soll.
    Also so:

    heap< vector<int> >* ddd = new heap(vek);

    oder vieleicht auch so:

    heap< vector<int> >* ddd = new heap< vector<int> > (vek); 🙄



  • template <class T>
    heap<T>::heap(const vector<T> &stl_vek)
    

    und

    heap< vector<int> > dddd(vek);
    

    Wenn dein Argument vek nicht gerade vom Typ vector<vector<int> > ist kann das nichts geben.
    Ich denke das was du möchtest ist eher

    std::vector<int> vek;
    heap<int> dddd(vek);
    

    oder?

    MfG Spacelord


Anmelden zum Antworten