Matrix-Template Problem mit generischem Operator
-
Hallo,
ich versuche gerade mein Matrix-Template zu implementieren.
ich brauche den operator+.
ich habe versucht, erst mal die Summe aus zwei Matrizen hinzubekommen. Dazu gbt es einen operator+ , ausserhalb der klasse, der zwei Matrizen, egal, wie sie beschaffen sind, addiert. Weil ich halt wenig Plan von der Sache habe, habe ich halt rumprobiert. Das war für die restlichen Funktionen kein schlechter Weg ...
Ich will mir ersparen, jeden Fall (int-double, int-float, double-int, double float, float-double, usw...) eigens zu implementieren. Dazu scheinen ja die Templates da zu sein.Der Kern meines
Der Code für meinen operator+ schaut so aus:
template <class R,class S,class T> MyMatrix<R> operator+(const MyMatrix<S>& lhs, const MyMatrix<T>& rhs){ lhs_laenge = lhs.getLaenge(); //laenge ist die gesamtlaenge des daten-arrays der Klasse. Zeilen, bzw. Spalten-Verwaltung gibts per Hand, spielt hier aber keine Rolle rhs_laenge = rhs.getLaenge(); lhs_zeilen = lhs.getZeilen(); // hier die Zeilenlaenge rhs_zeilen = rhs.getZeilen(); if(lhs_laenge!=rhs_laenge || rhs_zeilen!=rhs_zeilen) throw FormatException(); R neueWerte[lhs_laenge]; for(int i=0; i<lhs_laenge; i++){ neueWerte[i] = lhs.getAt(i)+rhs.getAt(i); //getAt(int) liefert den Wert im Array. Ist private, sonstige Leute sollen per Zeile-Spalte zugreifen. } return MyMatrix<R>(neueWerte, lhs_laenge, lhs_zeilen);// es gibt bequehmer-weise einen Konstruktor, mit dem ich das machen kann... }
wenn ich das testen möchte, meint mein Compiler(dev c++):
"no match for `MyMatrix<int>& + MyMatrix<double>&' operator"Wie schaut das aus mit den Templates. Darf eine Klasse die als Parameter vorkommt nur einmal genannt werden (Kann und will ich nir nicht vorstellen, dann müsste ich ja trotz Templates eine menge tippen...), oder habe ich an der Syntax grob was verplant(wäre die bessere aber peinlichere Variante)?
Falls ich derb daneben liege, wäre es cool, wenn mir jemand, der mit solchen dingen Erfahrung hat, weiterhelfen könnte.
Danke,
for(template<beginner>::answer_iterator i = c_DoubleAdder.begin(),/* can't_see_the_end */, i++){ do_learning;}
-
Ok, druckfehler löschen vergessen...
egal,
ich wollte mein template testen mit:
MyArray m1<int>(10,10); //dann ein paar werte reingebaut.. MyArray m2<double>(10,10); //nochmal werte... MyArray m3; //standard 'lauter nuller'- konstruktor m3<double> = m1+m2; copy und assignement-Konstrukor ist standardmässig dabei.
-
das was im letzten Beitrag 'MyArray' heisst, heisst eigentlich 'MyMatrix'.
Bin bisschen durcheinander gekommen...
Ich habe hier nur die wichtigen Teile nochmal nachvollzogen. leider mit der falschen Klasse im Kopf....-bin gerade sehr verwirrt :-)...-
-
war ein bisschen verplant gestern nacht... es war recht feuchtfröhlich...
deswegen genug mit dieser frage,
ich stell das template rein, wenns fertig ist...grüsse