Operator =



  • void operator=(const CObject& objectSrc);

    sollte statt void da nicht lieber CObject stehen?



  • kurze frage schrieb:

    sollte statt void da nicht lieber CObject stehen?

    Da sollte CObject**&** stehen, wenn der Operator wirklich verwendbar sein sollte. Bei einem Operator, der sowieso nicht benutzbar ist, dürfte das aber ziemlich egal sein.



  • Danke für eure Hilfe.

    Wenn ich aber trotzdem die Zuweisung = machen möchte , von welcher MFC-Klasse kann ich am besten ableiten. Ich möchte der Operator = nicht selber definieren/implementieren.



  • silke_berg schrieb:

    Wenn ich aber trotzdem die Zuweisung = machen möchte , von welcher MFC-Klasse kann ich am besten ableiten.

    Hatte es denn einen bestimmten Grund, dass du von CObject abgeleitet hast? Wolltest du die Serialisierung nutzen?

    Falls nicht, warum willst du überhaupt von einer anderen Klasse ableiten?

    Ich möchte der Operator = nicht selber definieren/implementieren.

    Ob du den implementieren musst, hängt aber nicht von der Basisklasse deiner Klasse ab, sondern von den Membern.



  • ich habe eigentlich nur abgeleitet von CObject weil ich die Zuweisung machen möchte.
    Da es in CObject nicht geht , moöchte ich von einer anderen Klasse ableiten , damit ich die Zuweisung machen kann.

    Wenn ich nicht ableite dann muss ich ja den Operator = in der meiner Klasse
    implementieren.



  • silke_berg schrieb:

    Wenn ich nicht ableite dann muss ich ja den Operator = in der meiner Klasse
    implementieren.

    Wie ich schon schrieb, das ist Unsinn. Ob du einen Zuweisungsoperator implementieren musst, hängt nicht von der Basisklasse ab. Wenn du keinen definierst, erstellt der Compiler einen für deine Klasse. Ob der aber tut, was du willst, hängt von den Membern deiner Klasse ab.



  • Ob es Unsinn ist oder nicht , wenn ich nicht ableite , dann bekomme ich genau den gleichen Fehler !!!



  • Dann zeig doch bitte mal die vollständige Deklaration von CDatei und die Zeile, in der der Fehler ist.



  • class CDatei
    {
    public:
    CDatei();
    CDatei( CString sDateinamePfad );
    virtual ~CDatei();
    CString GibFehlerDateiName( int nZaehler = 1 );

    private:
    CString m_sDateinamePfad;
    CString m_sDateiname;
    };

    Aufruf in einer anderen Klasse:

    bool CDatei_Verwalter::PruefeCollection( CDateiCollection*
    pobCollection )
    {
    CDatei *poDatei = new CDatei();
    for ( i = 0; i < pobCollection->GetSize(); ++ i ){
    *poDatei = * pobCollection->GetAt( i ) ; -hier kommt
    der Fehler
    ..........
    }



  • Lass mich raten: CDateiCollection ist von CObArray abgeleitet?

    CObjectArray::GetAt gibt ein CObject* zurück. Den Rückgabewert muss man normalerweise den richtigen Zeigertyp casten. Das geht aber nur dann, wenn der Elementtyp von CObject abgeleitet ist. Und Klassen, die von CObject abgeleitet sind, sind nicht kopierbar.

    Entweder du benutzt nicht CObArray, oder du verzichtest aufs Kopieren.



  • Toll ,

    jetzt ist mir klar , wieso es nicht geht.

    Vielen Dank.

    Gruß Silke.


Anmelden zum Antworten