Zuweisungsoperator überladen



  • Hallo zusammen!
    Möchte den Zuweisungsoperator so überladen das Objekte kopiert werden (mit verschiedenen Speicheradressen). Hier erstmal meinen Code den ich schon gemacht habe:
    #include <string.h>
    #include <iostream.h>
    class Mes
    {
    char* p; // Der Zeiger auf den Text der Meldung
    int x,y; // Die Koordinaten der Meldung

    public:

    Mes &operator = (const Mes &msg_in);
    Mes (void);
    Mes (char* p_in, int x_in, int y_in);
    Mes (const Mes &msg_in); //Kopierkonstruktor
    ~Mes (void);

    };

    Mes &Mes::operator = (const Mes &msg_in){
    {
    strcpy(p,msg_in.p);
    x = msg_in.x;
    y = msg_in.y;
    }

    return *this;//this ist der Zeiger auf das aktuelle Objekt.
    }

    void main (void) {

    cout << "main";

    Mes msg1("Meldung",3,5);
    Mes msg3;

    msg3 = msg1; //Hier soll der überladene Zuweisungsoperator angewendet werden
    }

    Beim Compiliern ist mein Code ansich ok. Aber beim Linken kommen Fehlermeldungen:
    Mes.obj : error LNK2001: unresolved external symbol "public: __thiscall Mes::~Mes(void)" (??1Mes@@QAE@XZ)
    Mes.obj : error LNK2001: unresolved external symbol "public: __thiscall Mes::Mes(void)" (??0Mes@@QAE@XZ)
    Mes.obj : error LNK2001: unresolved external symbol "public: __thiscall Mes::Mes(char *,int,int)" (??0Mes@@QAE@PADHH@Z)
    Debug/Mes.exe : fatal error LNK1120: 3 unresolved externals
    Error executing link.exe.

    Woran kann das liegen?

    Danke schonmal 😉



  • Die Fehlermeldungen kommen daher, dass du deine Konstruktoren und den Destruktor nicht implementiert hast, mit dem Zuweisungsoperator hat das nichts zu tun 🙄

    Dass der falsch ist, wirst du dann beim Ausführen merken 😉 Erstens bekommst du ein Problem, wenn die Länge des in msg_in vorhandenen Strings länger als der im aktuellen Objekt ist, da du dann über das Ende des reservierten Speichers hinweg schreibst. Und wenn das mal funktioniert, kracht es immer noch bei einer Selbstzuweisung.

    Für beides gibt es Standardverfahren, die in jedem (brauchbaren) Buch oder Tutorial für Anfänger stehen, es hat keinen Sinn, das hier ausführlich zu erklären.



  • @Bashar:
    wie prüfe ich eine selbstzuweisung die threadsafe sein soll?
    so macht man es ja üblicherweise:

    if(this == &msg_in)
    	return *this;
    

    bye



  • Keine Ahnung, frag das besser allgemein in die Runde als speziell an mich gerichtet 😉



  • Hallo,

    Ihr meint, man muss alles im Kopf haben? Nachschlagen -> Dietrich May;
    Grundlagen der Software-Entwicklung mit C++. Hat sehr gute Referenzen bei Amazon bekommen. Habs selbst.

    Gruss Jerry 😋



  • aber trotzdem bitte:
    #include <iostream>
    #include <string>

    die *.h sind deprecated (missbilligt) ⚠ 👎 👎 👎



  • jerry schrieb:

    Ihr meint, man muss alles im Kopf haben?

    Sowas schon 😉



  • #include <hirn.h>
    

Anmelden zum Antworten