Objekte als Parameter



  • Du wirfst Vector und Vektor wild durcheinander. Ich glaube, ich habe auch einen Vebtor gesehen...



  • c++chiller schrieb:

    //header
    Vektor addition(const Vektor& u);
    Vektor();
    ~Vektor();
    Vektor(float a, float b, float c);
    Vektor(Vektor &a);
    
    //source
    Vektor::Vektor(float a, float aa, float aaa){
    		this->a1=a  //edit
    		this->a2=aa;
    		this->a3=aaa;
    	}
    Vektor Vektor::addition(Vektor const& a){
            return Vektor(this->a1+a.a1, this->a2+a.a2, this->a3+a.a3);
    	}
    //main
    Vektor a(1,2,3);
        Vektor b(4,5,6);
        Vektor c = a.addition(b); //Hier kommt die Fehlermeldung
    


  • Erkläre mir mal bitte wozu du Zeilen 4 und 6 machst.



  • Wegen der Aufgabenstellung.
    Aber wenn ich diese Zeilen rauskommentiere dann komm die gleiche Fehlermeldung.



  • c++chiller schrieb:

    Wegen der Aufgabenstellung.
    Aber wenn ich diese Zeilen rauskommentiere dann komm die gleiche Fehlermeldung.

    Dann zeig vollständigen Code noch einmal.



  • class Vektor{
    ...
    };
    


  • Vektor(Vector &a);
    

    hier fehlt ein const
    non- const Referenzen dürfen nicht an RValues (vereinfacht: "namenlose objekte", wie hier der returnwert von "addition") gebunden werden
    die kopie darf zwar wegoptimiert werden, der compiler muss aber trotzdem prüfen ob sie erlaubt wäre, wenn er sie machen würde



  • hustbaer schrieb:

    Vektor(Vector &a);
    

    hier fehlt ein const
    non- const Referenzen dürfen nicht an RValues (vereinfacht: "namenlose objekte", wie hier der returnwert von "addition") gebunden werden
    die kopie darf zwar wegoptimiert werden, der compiler muss aber trotzdem prüfen ob sie erlaubt wäre, wenn er sie machen würde

    Das ist die Lösung! Das mit const muss ich mir noch genauer angucken.
    Vielen Dank an alle!!


  • Mod

    c++chiller schrieb:

    Das ist die Lösung! Das mit const muss ich mir noch genauer angucken.
    Vielen Dank an alle!!

    void foo(int &i) { }
    void bar(const int& i) { }
    
    int main()
    {
      foo(5);
      bar(5);  
    }
    

    Ist dir klar, warum der Aufruf von bar geht, der von foo nicht? Dein Fall ist identisch, bloß dass der Aufruf von Vektor::Vektor(Vektor&) ein bisschen versteckt ist.



  • Ist dir klar, warum der Aufruf von bar geht, der von foo nicht?
    

    Nein leider nicht 😕


Anmelden zum Antworten