Frage zu Copy Konstruktor
-
Klasse Objekt
class Object { protected: enum SelectState { NOT_SELECTED, //Nicht ausgewählt MOUSE_DOWN, //Maustaste über Objekt gedrückt SELECTED //Objekt ausgewählt }; //Objekt Position Point2Du m_pos; //Alte Objekt Position Point2Du m_oldpos; //Zeiger auf Hauptklasse Window Window *m_pwindow; //Objekt ausgewählt SelectState m_selected; //Wann wurde Objekt ausgewählt DWORD m_selectmoment; //Kollision mit Greifpunkt ja/nein bool m_collision; //Die Größe des Greifpunktes int m_gpsize; //Objekt verändert? bool m_changed; //Objekt verschieben? bool m_move; //Soll der GraspPoint angezeigt werden bool m_showgrasppoint; //Überprüft ob das Objekt ausgewählt wird Select(); //Überprüft auf Kollision mit dem Greifpunkt bool Collision( Point2Du pos ); //Zeichnet den Punkt an welchem man das Objekt verschieben kann DrawGraspPoint( bool clear ); public: Object( Window &pwindow ); //Object( const Object &obj ); //Destruktor ~Object(); //Position des Objekts setzen SetPos( Point2Du newpos ); SetPos( int nx, int ny ); //Objekt ausgewählt bool IsSelected(); //Gibt die Zeit aus wann das Objekt ausgewählt wurde DWORD GetSelectMoment(); //Ausgewählt von außerhalb setzen SetSelectState( bool selected ); //Hier wird jedes Objekt gezeichnet virtual Render(); //Hier wird auf Eingaben vom Benutzer reagiert virtual React(); };
-
Ich dachte aber, dass ein Standard Kopier Konstruktor immer verfügbar ist
Nur, wenn du selbst keinen Konstruktor definiert hast.
-
Ist denn dann der folgende Copy Konstruktor richtig?
fa::Object::Object( const Object &obj) { (*this) = obj; }
-
interpreter schrieb:
Ich dachte aber, dass ein Standard Kopier Konstruktor immer verfügbar ist
Nur, wenn du selbst keinen Konstruktor definiert hast.
ROFL
-
//edit
-
interpreter schrieb:
Ich dachte aber, dass ein Standard Kopier Konstruktor immer verfügbar ist
Nur, wenn du selbst keinen Konstruktor definiert hast.
Ein Kopierkonstruktor wird immer erzeugt, wenn du keinen eigenen Kopierkonstruktor definierst.
-
Was mich zu der Frage zurückbringt, warum denn dann kein Kopier Konstruktor verfügbar ist, wenn ich keinen selber definiere( siehe ganz oben )?
-
Also Object sollte einen haben. Kannst du "Object a; Object b = a" schreiben? Wenn ja, liegt der Fehler immerhin nicht in Object. Geht das Gleiche mit Lights? Ist es ein vector<Object> (böse) oder ein vector<Light>?
-
Die Klasse Light wär an der Stelle wohl nicht ganz uninteressant, auf jeden Fall interessanter als Object.
-
Also folgendes, ohne eigenen Kopier Konstruktor
fa::Object a,b; a = b; fa::Light c,d; c = d;
ist möglich. Aber bei dem Vektor(ist ein std::vektorfa::Light) genauer gesagt bei der push_back funktion meckert er.
-
lool schrieb:
interpreter schrieb:
Ich dachte aber, dass ein Standard Kopier Konstruktor immer verfügbar ist
Nur, wenn du selbst keinen Konstruktor definiert hast.
ROFL
Na Cico, wieder am trollen?
-
Bashar schrieb:
interpreter schrieb:
Ich dachte aber, dass ein Standard Kopier Konstruktor immer verfügbar ist
Nur, wenn du selbst keinen Konstruktor definiert hast.
Ein Kopierkonstruktor wird immer erzeugt, wenn du keinen eigenen Kopierkonstruktor definierst.
Ja, genau das meinte ich. War vielleicht nicht genau genug ausgedrückt.
-
Nehm ich dir nicht ab, weil diese Aussage in dem Kontext Blödsinn wäre, aber egal, darum gehts ja nicht ...
-
Bashar schrieb:
Nehm ich dir nicht ab, weil diese Aussage in dem Kontext Blödsinn wäre, aber egal, darum gehts ja nicht ...
Gerade in dem Kontext war es sinnvoll. Dass es sich auf den Cpy-Ctor bezog, konnte man ja aus dem vorausgehenden Zitat folgern.
-
Du willst wohl gern Recht behalten, aber denk das nochmal im Kontext durch. EOD für mich.
-
Naja, is mir jetzt auch zu blöd rumzudiskutieren, nur weil ich es nicht 100%ig korrekt ausgedrückt habe.
-
Was mich zu der Frage zurückbringt, warum denn dann kein Kopier Konstruktor verfügbar ist, wenn ich keinen selber definiere( siehe ganz oben )?
Object( Window &pwindow );
Ist das denn keiner?
Jeder Ctor mit einem Parameter der nicht explicit declariert ist ein CopyCtor.
-
Irgendwer schrieb:
Jeder Ctor mit einem Parameter der nicht explicit declariert ist ein CopyCtor.
Wow das wird ja immer besser hier
Nein, ein Kopierkonstruktor der Klasse A ist ein Konstruktor mit einem Parameter vom Typ "Referenz auf A" oder "Referenz auf konstantes A" (12.1p10)
-
Kaasbrot schrieb:
Also folgendes, ohne eigenen Kopier Konstruktor
fa::Object a,b; a = b; fa::Light c,d; c = d;
ist möglich.
Du bringst ja auch überhaupt keinen copy ctor ins Spiel. Nochmal zur Verdeutlichung:
foo a; // default ctor a = b; // Zuweisungsoperator (op=) foo a = b; // copy ctor
Um deinen Fehler zu spezifizieren, müssen wir deine Light Klasse kennen.
Ich vermute, dein Problem liegt darin, dass du keinen default ctor (ctor ohne Parameter) in Object definiert hast. Diesen erzeugt dein Compiler zwar automatisch, aber nur, wenn du keinen ctor selbst definiert hast.
-