Frage zu Copy Konstruktor



  • 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.





  • Hi,
    Also ich habs jetzt nochmal ausprobiert und diesmal auch wirklich den copy ctor benutzt. Funktioniert bei der Object und der Light Class problemlos.

    fa::Object a;
    	fa::Object b = a; // oder auch fa::Object b( a );
            //und das ganze geht mit Light auch
    

    Nur sobald ich eine der beiden Klassen in eine push_back Funktion ihrer zugehörigen Vectors stecke kommt dieser Fehler ganz vom Anfang( "Kein Kopierkonstruktor verfügbar").

    groovemaster2002 schrieb:

    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.

    Ich hab schon probiert einen default ctor anzulegen. Kommt der gleiche Fehler.



  • Zeig doch mal mehr Code ... was für ein vector ist das, wie sieht Light aus ... unnötigen Krams wie irgendwelche irrelevanten Methoden weglassen. Allgemein alles weglassen, was man weglassen kann, ohne dass der Fehler verschwindet.



  • Sersn,
    Ich hab jetzt rausgefunden was schuld ist an dem Fehler. Ein Template von mir, welches einen Punkt darstellen soll. Kenn mich da noch nicht so gut aus. Könnte mir jemand sagen was daran nicht stimmt?

    [edit]
    Hat sich erledigt. Lag alles an dem = operator.
    Danke für alle Antworten!
    [/edit]


Anmelden zum Antworten