operator= nicht automatisch generiert?



  • Bei einem CArray <bla, bla& > kommt der Fehler 'bla' : 'operator=' ist nicht verfügbar:
    [code type="C++" tabs="4"]
    template<class TYPE, class ARG_TYPE>
    void CArray<TYPE, ARG_TYPE>::SetAtGrow(int nIndex, ARG_TYPE newElement)
    {
    ASSERT_VALID(this);
    ASSERT(nIndex >= 0);

    if (nIndex >= m_nSize)
    SetSize(nIndex+1, -1);
    m_pData[nIndex] = newElement; // HIER!
    }code]

    Die Klasse 'bla' ist von CObject abgeleitet.
    Wird der operator= dafür nicht automatisch generiert?



  • oder soll ich lieber ein CArray <bla, bla* > nehmen?



  • Hat alles seine Vorteile.

    Wenn du das CArray mit Pointern nimmst dann musst du deine Daten mit delete per Hand freigeben. Dafür müssen aber die Daten nicht ins Array kopiert werden.



  • ich erkläre die Situation mal ganz:

    Ich habe eine Klasse(CClass), die serialisierbar sein soll und die das oben genannte CArray<> enthält. 'bla' soll auch serialisierbar sein, daher muss ich es von CObject ableiten, oder?

    hier ist der Code:

    void CClass::Serialize(CArchive &ar)
    {
        CObject::Serialize(ar);
    
        if (ar.IsStoring())
        {
            // SPEICHERN
            int Size = m_Array.GetSize();
            ar << Size;
            for (int i = 0; i < Size; ++i)
            {
                ar << &(m_Array[i]);
            }
        }
        else
        {
            // LADEN
            int Size;
            ar >> Size;
            for (int i = 0; i < Size; ++i)
            {
                bla *pBla;
                ar >> pBla;
                m_Array.Add(*pBla);
            }
        }
    }
    


  • CArray ist auch serialisierbar (Wie alle MFC-Datenklassen - oder fast alle)
    Also reicht:

    /E:
    Ups, ich meinte natürlich:
    myArray.Serialize(ar);

    [ Dieser Beitrag wurde am 23.01.2003 um 15:44 Uhr von Nemesyzz editiert. ]


Anmelden zum Antworten