Problem mit Argument-Übergabe in Matrix Template Klasse
-
moin moin
In meiner selbstgeschriebenen Matrix Klasse bekomme ich immer eine Fehlermeldung bei einer Funktion.
Erstmal die Klasse:template <typename T> class Matrix { private: size_t X; size_t Y; T** pointer; //2D Array bildet die Matrix public: //Konstruktoren, Kopierkonstruktor, Destruktor, Zuweisungsoperator usw long double winkel(const Matrix& obj); //winkel zwischen 2 vektoren, HIER LIEGT DER FEHLER T skalarprodukt(const Matrix& obj); long double betrag(); //bzw. länge };Die Funktion zum Berechnen des Betrags:
template <typename T> long double Matrix<T>::betrag() { T sum=0; for(size_t y=0;y!=Y;++y) sum+=(pointer[0][y]*pointer[0][y]); long double bet=0; bet=std::sqrt(sum); return bet; }Die Funktion zum Berechnen des Winkels:
template <typename T> long double Matrix<T>::winkel(const Matrix& obj) { const long double pi = 3.14159265; T skalar = (*this).skalarprodukt(obj); // kein Fehler long double betr =(*this).betrag() + obj.betrag(); // HIER DER FEHLER long double wink=std::acos(skalar/betr); return (wink*=(180/pi)); }Wenn ich jetzt folgendes Berechnen will
int main() { Matrix<int> a(3,1); Matrix<int> b(3,1); long double c=a.winkel(b); }bekomme ich folgende Fehlermeldung:
CodeBlocks:
[b]error: passing `const Matrix<int>' as `this' argument of `long double Matrix<T>::betrag() [with T = int]' discards qualifiers Process [/b]Visual C++ 2008
[b]error C2662: 'Matrix<T>::betrag': this-Zeiger kann nicht von 'const Matrix<T>' in 'Matrix<T> &' konvertiert werden with [ T=int ] Durch die Konvertierung gehen Qualifizierer verloren[/b]Sieht jemand woran das liegt

-
long double betrag(); //bzw. längemuss einfach mal const sein... sonst geht es schlecht, nen konstantes objekt zu übergeben und dann die fkt aufzurufen (wie du es ja versucht hast)...
außerdem würd ich die funktionen nicht als member-fkt implementieren, sondern eben als freie fkt...bb
PS:
long double bet=0; bet=std::sqrt(sum); return bet;was spricht ggn:
return std::sqrt(sum);edit:
(*this).skalarprodukt(obj); this->skalarprodukt(obj);was ist hübscher? ^^