Standard-Compiler-Fehlermeldung: "Die Übergabe von bla als >>this<<-Argument von bla streicht Qualifizi
-
Hallo Leute,
bestimmt ist mein Problem relativ einfach zu beheben, aber ich bin nach längerer Programmier-Abstinenz nicht mehr so fit in C++ und nach langer Fehlersuche jetzt schon ziemlich frustriert und brauche einfach mal einen Tipp, was ich falsch mache.
Ich wollte eine kleine Klasse für Vierervektoren schreiben und dazu überlade ich auch den Indexoperator [] und den Additionsoperator +. Die einzigen privaten Daten der Klasse FourVector sind ein vector<double>class FourVector{ private: vector<double> vec; public: [...] [\code] Im überladenen Additionsoperator steckt nun aber ein Fehler. Auf der Suche nach dem Fehler, hab ich die einzelnen Anweisungen in dieser Funktion dann aufgedröselt [code] FourVector FourVector::operator+(const FourVector & v1){ double b1 = v1[0]; Line 59 double b2 = v1[1]; double b3 = v1[2]; double b4 = v1[3]; Line 62 double a1 = vec[0] + b1; double a2 = vec[1] + b2; double a3 = vec[2] + b3; double a4 = vec[3] + b4; return FourVector(a1, a2, a3, a4); }Normalerweise würde ich direkt schreiben
return FourVector(vec[0] + v1[0], vec[1] + v1[1], vec[2] + v1[2], vec[3]+ v1[3]);Der Compiler gibt mir zu Line 59 bis 62 immer folgende Fehlermeldung aus
FourVector.cpp: In member function »FourVector FourVector::operator+(const FourVector&)«:
FourVector.cpp:59: Fehler: Die Übergabe von »const FourVector« als »this«-Argument von »double& FourVector::operator[](const int&)« streicht Qualifizierer
FourVector.cpp:60: Fehler: Die Übergabe von »const FourVector« als »this«-Argument von »double& FourVector::operator[](const int&)« streicht Qualifizierer
FourVector.cpp:61: Fehler: Die Übergabe von »const FourVector« als »this«-Argument von »double& FourVector::operator[](const int&)« streicht Qualifizierer
FourVector.cpp:62: Fehler: Die Übergabe von »const FourVector« als »this«-Argument von »double& FourVector::operator[](const int&)« streicht QualifiziererDer Indexoperator ist
double& FourVector::operator[](int const & index){ if(index>=0 && index<=4){ return (vec[index]); } else{ cerr << "Index out of range!" << endl; return vec[0]; } }Kann mir jemand sagen, was ich falsch mache?


Ich hab gerade eben die Vermutung gehegt, dass ich irgendwie den Indexoperator [] als const deklarieren muss, weil das erste Argument ja ein const FourVector wäre, alsodouble& FourVector::operator[] const(int const & index){Danach bekomm ich nur noch eine einzige Fehlermeldung
FourVector.cpp:45: Fehler: expected initializer before »const«
die ich aber in diesem Kontext auch nicht verstehe... Help?
-
double& FourVector::operator[] (int const & index)const{
-
Ich würde in einer Klasse für mathematische Vektoren auch nicht unbedingt den STL-Container
std::vectorals interne Speichermöglichkeit benutzen, da dieser relativ massiv ist und du seine Funktionalität zur dynamischen Verwaltung gar nicht benötigst.Hier wäre ein einfaches Array angebracht, da du damit auf dem Stack arbeiten kannst und die Dimension ja sowieso konstant bleibt. Du verschwendest so weniger Speicher, und eventuell gewinnst du sogar noch ein bisschen Performance. Und für die strikten Arrayhasser gibts ja noch
boost::arraybzw.std::tr1::array.Ausserdem definiert man die "unabhängigen" Operatoren wie
+,-,<,==etc. normalerweise als globale Funktionen und+=,-=, etc. innerhalb der Klasse.