Überladener Zuweisungsoperator funktioniert nicht!



  • Hallo 🙂 ,

    ich habe zwei Strukturen erstellen
    - srctKalenderEintrag
    - srctWiederholenderKalenderEintrag.

    Die zweite Struktur "srctWiederholenderKalenderEintrag" enthält mehrere Variablen, die die erste Struktur nicht hat.
    Ich möchte nun die gleichen Variablen der Struktur "srctKalenderEintrag" in die
    Struktur "srctWiederholenderKalenderEintrag" kopieren/ zuweisen. Ich habe dazu die Funktion

    srctWiederholenderKalenderEintrag ^&operator=(const srctKalenderEintrag ^o)

    erstellt, aber ich kriege immer die Fehlermeldung:
    "ERORR: cannot convert from srctKalenderEintrag^ to srctWiederholenderKalenderEintrag^".
    Findet jmd den Fehler???

    Ich habe in beiden Strukturen mehrere unterschiedliche Variablen. Zur besseren Übersicht habe ich hier nur eine gleiche String-Variable in den Strukturen hinzugefügt.

    ref struct srctKalenderEintrag
    {
    	String		^m_sTitel;
    	int			m_iDauer;
    };
    
    ref struct srctWiederholenderKalenderEintrag
    {
    	String		^m_sTitel;
    
    	String ^	m_sStartZeit;
    	String ^	m_sEndZeit;
    	// weitere...
    
    } ;
    
    ref class CFormatierung                            // In XML
    {
    public:
    
    	srctWiederholenderKalenderEintrag ^&operator=(const srctKalenderEintrag ^o)
    	{
    		srctWiederholenderKalenderEintrag ^stWiederholenderKalenderEintrag = gcnew srctWiederholenderKalenderEintrag;
    		stWiederholenderKalenderEintrag->m_sTitel                    = o->m_sTitel;   
    
    	return stWiederholenderKalenderEintrag;
    	}
    
    	srctWiederholenderKalenderEintrag^ SpeicherNeuenEintragInStruct(Xml::XmlNode ^&Node, srctKalenderEintrag^ &m_srctKalenderEintrag, int &i)
    	{
    		if(Node->ChildNodes[i]->Name == "Titel" )
    			m_srctKalenderEintrag->m_sTitel  = Node->ChildNodes[i]->InnerText;       
    
    		  :arrow_right: srctWiederholenderKalenderEintrag^ stWiederholenderKalenderEintrag = m_srctKalenderEintrag; //  F E H L E R
    
    	return stWiederholenderKalenderEintrag;
    
    	}
    }
    


  • Das ist kein Standard-C++ (möglicherweise C++/CLI?). Ob das, was du da machst in deiner Programmiersprache geht, weiß ich nicht, du fragst besser in einer passenden Gruppe



  • Überleg dir mal, wem du mit deinem operator= was zuweisen willst. Dann weißt du auch, wo die Definition dieses Operators hingehört. Schau dir auch mal an, wie die kanonische Form des operator= ist.



  • Stimmt, das ist .Net. Ich wollte es eig auch dort reinstellen, aber hab es wohl vertauscht...
    Da ich nicht registriet bin, kann ich das, glaube ich, auch nicht verschieben...
    Und Doppelposten soll man ja nicht...

    Michael E. schrieb:

    Überleg dir mal, wem du mit deinem operator= was zuweisen willst. Dann weißt du auch, wo die Definition dieses Operators hingehört. Schau dir auch mal an, wie die kanonische Form des operator= ist.

    Ich verstehe das einfach nicht. Ich will den Inhalt von srctKalenderEintrag in srctWiederholenderKalenderEintrag kopieren, deswegen ja srctWiederholenderKalenderEintrag ^&operator=(const srctKalenderEintrag ^o).
    Ich denke, was bestimmt falsch ist, ich versteh es aber nicht anders, dass dadurch
    bei so einer Zuweisung

    srctKalenderEintrag ^vv;
    srctWiederholenderKalenderEintrag ^ddd = vv;

    der Inhalt von vv in ddd zugewiesen wird. Ich weiß aber nicht wie ich die operator-Funktion schreiben soll, da ich das nicht verstehe 😕😕😕😕😕😕 .



  • .Netie schrieb:

    Ich verstehe das einfach nicht. Ich will den Inhalt von srctKalenderEintrag in srctWiederholenderKalenderEintrag kopieren, deswegen ja srctWiederholenderKalenderEintrag ^&operator=(const srctKalenderEintrag ^o).
    Ich denke, was bestimmt falsch ist, ich versteh es aber nicht anders, dass dadurch
    bei so einer Zuweisung

    srctKalenderEintrag ^vv;
    srctWiederholenderKalenderEintrag ^ddd = vv;

    der Inhalt von vv in ddd zugewiesen wird. Ich weiß aber nicht wie ich die operator-Funktion schreiben soll, da ich das nicht verstehe 😕😕😕😕😕😕 .

    srctWiederholenderKalenderEintrag ^ddd = vv;
    

    ist nichts anderes als

    srctWiederholenderKalenderEintrag ^ddd(vv);
    

    Das heißt, hier wird der Operator= gar nicht aufgerufen.

    Schau mal in ein Buch unser Magazin, wie das mit der Operatorüberladung funktioniert.


Anmelden zum Antworten