Template Problem
-
Hallo
Ich habe folgendes Problem mit meiner Template class.
Ich habe einen Konstruktoren der wie folgt aussiehttemplate <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 soheap(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 eherstd::vector<int> vek; heap<int> dddd(vek);
oder?
MfG Spacelord