Element einem Array hinten anhängen



  • Hallo!

    Wie kann ich einem Array ein Element hinten anhängen?
    Ich kann keine STL oder sowas in der Art benutzen.

    Hier mein Ansatz:

    CGiro giro_konten[255]; // Array aus meinem eigenen Datentyp
    	int i = 0;
    	while( i < 255 ) {
    		if( giro_konten[i] == '\0' ) {
    			cout << i << " ist leer\n";
    		}
    	}
    

    Das geht aber nicht, da kommen ganz eigenartige Fehler, die ich nicht verstehe:

    1>c:\dokumente und einstellungen\root\workspace\gse1\test.cpp(95) : error C2784: "bool std::operator ==(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "CGiro" hergeleitet werden.
    1> c:\programme\microsoft visual studio 9.0\vc\include\string(90): Siehe Deklaration von 'std::operator =='

    Das liegt wahrscheinlich daran, dass undefinierte Elemente nicht einfach die 0 enthalten, so wie es bei einem Char-Array ist.

    Gürße, pktm



  • Für deinen eigenen Datentyp wird immer der Defaultkonstruktor aufgerufen. Hier also der Defaultkonstruktor von CGiro.

    Und der Kompiler meckert, dass er ein CGiro nicht mit einem char vergleichen kann.



  • pktm schrieb:

    CGiro giro_konten[255];
    

    hier wird ja ein array aus objekten erstellt, das heisst das array ist
    bei der deklaration bereits vollständig mit CGiro-Objekten gefüllt.
    ich würde hier vielleicht mit placement new vorgehen:

    #include <new>
    /* ... */
    char stack[512]; //speicher von 512 byte wird reserviert
    //Objekte reinspeichern
    CGiro* pGiro = new CGiro (stack); //bin nicht sicher ob das genau stimmt...
    //noch ein Objekt reintun
    CGiro* nochEinGiro = new CGiro (stack + sizeof(CGiro));
    //so wird das neue CGiro-Objekt hinter das alte in stack gespeichert, glaub
    //ich jedenfalls....:-)
    

    aber wie gesagt: syntax ohne gewähr, such doch mal nach placement new.. 🙂



  • Der Ausdruck in Klammern gehört beim Placement New vor den Typennamen. Aber wieso eigentlich für sowas Placement New verwenden, ein dynamisch anelegtes Feld tut's auch.

    Wieso die STL nicht verwendet werden soll, verstehe ich allerdings nicht. Letztendlich liefe es darauf hinaus, dass man eben Teile der STL nachprogrammiert.


Anmelden zum Antworten