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 Qualifizierer

    Der 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, also

    double& 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::vector als 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::array bzw. std::tr1::array .

    Ausserdem definiert man die "unabhängigen" Operatoren wie + , - , < , == etc. normalerweise als globale Funktionen und += , -= , etc. innerhalb der Klasse.


Anmelden zum Antworten