neues Objekt in ein CArray?



  • @Cpp_Junky
    Hab' aber gelesen, dass man in neuen Programmen lieber das CArray verwenden sollte. Dein CObArray verwaltet ja auch nur die Zeiger, ich würde jedoch gern die Objekte selber speichern.

    Ist es den wirklich so schwer sich so einen Kopierkonstruktor für mein Objekt auszudenken? Klär mich bitte auf!

    Strolli



  • Hi Strolli, nimm doch mal deinen Kopierkonstruktor ganz raus. Der Compiler generiert automatisch einen. Du musst eigentlich nur einen schreiben, wenn du mit dynamischen Speicher (new) handhabst. Sieht aber nicht so aus, als wäre es bei dir der Fall, weil du ja keine Zeiger als Membervariablen hast.



  • sorry. du hattest es ja erst ohne.

    kannst du das projekt mal irgendwo hochladen oder per mail verschicken? würde mir das gerne mal angucken, wenn ich darf. 😛



  • Kein Problem. Wohin soll ich es mailen? Hochladen geht auch ...



  • ja super. dann lad lieber hoch dann können auch noch andere mal gucken!! 😋



  • Also, als ZIP-Archiv unter http://www.mycgiserver.com/~strolli/O45.zip. Aber versucht bitte nicht das ganze Projekt zu kompilieren, das wird nix. 😃 Hab' noch diverse Änderungen vorgenommen die noch nicht überall eingearbeitet sind.

    Das mit dem CArray steht bisher nur in der Klasse CDocPrisma. Deren Interaktion mit der dazugehörigen View (CViewPrisma), CMessgPrisma und CWinkel klappt soweit fehlerfrei. Also nur die CPP-Datei von CDocPrisma kompilieren, dann müßte der Fehler reproduzeirbar sein.

    Danke!
    Strolli



  • Schade das man dein Projekt nicht vollständig kompilieren kann.

    Höchstwahrscheinlich liegt es an den konstanten Membervariablen. (hab da jetzt auf die schnelle nur const double pi entdeckt). Dann kann der Compiler nämlich keinen Copy-Constructor generieren.



  • Ne, sorry. Das war es doch nicht.

    Hab das zum Compilieren bekommen nach 1000 Änderungen 😉

    Es liegt irgendwie daran das du von CObject erbst.



  • Hab nochmal folgende Info gefunden:

    CObject makes the copy constructor and operator = private, so you can't
    do things like this...

    Also musst du entweder Copy-Konstruktor UND Zuweisungsoperator selbst schreiben oder du erbst einfach nicht von CObject, was wohl die bessere Wahl ist.



  • Von CObject würde ich schon erben - ich denke mal er braucht das später für Serialisierung.

    class CMessgPrisma : public CObject  
    {
    private:
    	CWinkel m_WinkelLinks, m_WinkelRechts;
    	double m_Lambda;
    public:
    	CMessgPrisma()
    	{
    		// Standardinit.
    	}
    	CMessgPrisma(const CMessgPrisma& src) :
    		m_WinkelLinks(src.m_WinkelLinks),
    		// ...
    	{}
    	operator =(const CMessgPrisma& src)
    	{
    		m_Lambda = src.m_Lambda;
    		// ...
    	}
    };
    

    /edit:

    Und nimm:
    [cpp]CArray<CMessgPrisma, CMessgPrisma/* --> /&> m_prisma;[/cpp]
    Sonst muss bei Add
    2x kopiert werden.


Anmelden zum Antworten