Dreidimensionales Array mit Zeigern auf Klasseninstanzen - WIE GEHTS?!



  • Hallo!
    Ich schlage mich nun schon seit mehreren Stunden (!) mit einem Problem herum:

    Ich habe eine Klasse "Tile". Davon gibt es viele Instanzen, die ich alle in einem zweidimensionalen Array speichere - Tile *tileList[4][8].
    Dieses zweidimensionale sollte nun doch lieber ein dreidimensionales werden. Und die 3. Dimension soll ihre Größe einer globalen Variable entnehmen, die am Anfang des Programmes berechnet wurde.
    Wenn ich nun das hier:

    Tile *tileList[gSystem->bgTileCount][4][8];
    

    In der Headerdatei der "Tile"-Klasse schreibe, bekomme ich den Fehler:

    data member may not have variably modified type `Tile*[((unsigned int)((int)Singleton<T>::get [with T = System]()->System::bgTileCount))][8][4]' BGTilesUI.hpp LevelEditor/src line 13 C/C++ Problem

    Mittlerweile ist mein Kopf schon so verbrummt, dass ich garnicht mehr weiss wie ich das Problem genau formulieren soll (habe auch schon so viele unteschiedliche Dinge ausprobiert)...jedenfalls - kann ich dieses Array irgendwie umsetzen?
    Oder soll ich lieber einen dreidimensionalen Vektor verwenden? Wenn ja - wie gehts das :)? Das hab ich nämlich auch schon - ohne Erfolg - versucht...

    Bin verzweifelt - ALSO BITTE HELFEN :)!!

    Danke, danke, danke für die Hilfe!



  • Da kannst auf dem Stack kein Array variabler Größe anlegen. Dazu müsstest du dynmisch speicher alloziieren mit new.

    Aber nimm am besten einen std::vector:

    vector<Tile *> v3(8,0);
    vector< vector<Tile *> > v2(4, v3);
    vector< vector< vector<Tile *> > > v(gSystem->bgTileCount, v2);
    
    v[0][2][1] = new Tile;
    


  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • this->that schrieb:

    Aber nimm am besten einen std::vector:

    vector<Tile *> v3(8,0);
    vector< vector<Tile *> > v2(4, v3);
    vector< vector< vector<Tile *> > > v(gSystem->bgTileCount, v2);
    
    v[0][2][1] = new Tile;
    

    hm...das sieht schon nach dem aus, was ich suche.
    Allerdings kann ich den Code nicht bei mir umsetzen - muss ich ausser der <vector>-lib doch nichts einbinden oder?
    Jedenfalls nörgelt mein Compiler sobald ich die Parameter in den Klammern dazusetze (wie z.Bsp. v2**(4, v3)**). Lasse ich diese weg, gehts compilieren (aber hat natürlich keinen Schopf)

    vector<Tile *> v3;
    vector< vector<Tile *> > v2;
    vector< vector< vector<Tile *> > > v;
    

    Woran liegt das?

    this->that schrieb:

    Da kannst auf dem Stack kein Array variabler Größe anlegen. Dazu müsstest du dynmisch speicher alloziieren mit new.

    genau, soweit war ich auch schon - allerdings hab ich das auch nich hinbekommen - könnte mal jmd ein Beispiel zeigen, wie ich das mit den hier verwendeten Variablen / Klassen syntaktisch korrekt realisiere?
    Mir schien es als würde der "Typ" den ich verwende (also "Tile", bzw. "Tile*") die Probleme bei new verursachen.



  • hm...keiner kann mir hierfür noch n tip geben? Das Thema is nach wie vor von direkter Relevanz für mich....



  • poste mal die fehlermeldung, die dir dein compiler da gibt...

    bb


Anmelden zum Antworten