Neues Objekt in Methode erzeugen



  • Hallo,

    ich schreibe gerade ein Programm in dem Vektoren als Klassen implementiert sind.

    Mein Problem ist folgendes:

    Ich möchte eine Methode innerhalb der Klasse "Vektor" schreiben, die zwei Vektoren als Objekte übergeben bekommt, diese addiert und einen neuen Vektor zurückgibt.

    Vektor Vektor::add (Vektor a, Vektor b){
    
    	Vektor temp;
    
    	 temp.x = a.x + b.x;
    	 temp.y = a.y + b.y;
    	 temp.z = a.z + b.z;
    	 return temp;
    
    }
    

    x,y,z sind die Koordinaten des Vektors.

    Ich bekomme die Fehlermeldung: error: no matching function for call to 'Vektor::Vektor()'

    Mein Problem ist also die Rückgabe des Ergebnisses. Wie kann ich die Rückgabe besser gestalten?

    Gruß Sebastian


  • Mod

    Dein Problem hat nichts mit der Rückgabe zu tun. Die Fehlermeldung besagt, dass ein bestimmter Konstruktor benutzt wurde, der aber nicht vorhanden ist. Dem Inhalt der Meldung nach, bezieht diese sich wohl auf deine Zeile 3, wie der vollständigen Fehlermeldung auch zu entnehmen sein sollte.

    Du benutzt hier den Standardkonstruktor, d.h. den Konstruktor ohne Parameter. Du hast offensichtlich einen anderen Konstruktor selber geschrieben. Ich rate einfach mal: Einen, der die drei Komponenten des Vektors als Parameter hat? Du musst also entweder einen parameterlosen Konstruktor zur Verfügung stellen oder aber deinen anderen Konstruktor benutzen. Letzteres scheint die passende Lösung zu sein, sofern ich mit meiner Vermutung recht habe, welcher Art dein selbstgeschriebener Konstruktor ist. Das heißt nicht, dass es nicht auch sinnvoll sein kann, zusätzlich noch einen Standardkonstruktor zur Verfügung zu stellen. Tu das aber nur, wenn dieser auch wirklich sinnvoll für deine Klasse ist, d.h. nur wenn es entweder sinnvoll sein kann, uninitialisierte Objekte zu haben, oder wenn es sinnvolle Standardwerte gibt.



  • Da hatte ich aber echt ein Brett vorm Kopf...
    Tatsächlich habe ich den Konstruktor so geschrieben, dass man direkt die Koordinaten beim initialisieren eingibt.
    Ich habe mich aber so darauf versteift, dass das alles so nicht funktionieren kann, wie ich mir das vorgestellt habe, dass ich so einen banalen Fehler garnicht gesehen habe 🙄

    Vielen dank für die schnelle Antwort, jetzt klappts.



  • Wenn Vektor aber eine Klasse ist, warum ist dein Vektor::add dann eine Methode, die überhaut nichts von this benutzt?

    Ich hätte jetzt erwartet, dass entweder
    a) add nur einen Parameter nimmt und den mit zu this addiert und nichts returned
    b) add nur einen Parameter nimmt und als Ergebnis einen Vektor aus this + übergebenem Vektor zurückgibt (und dass add somit const ist)
    c) add eine freie Funktion ist (keine Methode) mit den Parametern wir bei dir (nur dass ich sie wohl als const-ref übergeben hätte)



  • Ihr solltest mehr Compiler benutzen, die eine Code-Zeile bei der Fehlermeldung mit angeben. Mir hilft das immer sehr 😉



  • Entweder habe ich das jetzt bei allen Euren Antworten übersehen, oder es ist noch gar nicht angesprochen worden.

    Du versuchst da eine lokale Variable aus dieser Funktion zurück an dein Programm zu geben! Was denkste denn, wie lange diese Variable/dieser temp-Vektor gültig sein wird?
    Soooo wird das nicht gut gehen!



  • Das ist ganz normales C++, der Wert wird einfach kopiert.


Anmelden zum Antworten