DAU fragt: mehrdimensionales Array erzeugen?



  • Guten Tag

    Ich wollte heute zum ersten mal .Net C++ programmieren aber:
    Ich find einfach nicht raus, wie man in Microsoft Visual Studio .Net C++ ein multidimensionales Array erzeugen kann:

    Ich möchte ein Schachbrett generieren mit einem Array von Panels. Das müsste doch etwa so gehen:

    private: System::Windows::Forms::Panel[][] mSchachbrett[8][8];
    

    Ich habe auch schon 10 andere Varianten ausprobiert aber es lässt sich nicht kompilieren...

    Bitte helft mir... Es muss doch einfach gehen, sonst such ich mir eine andere Programmiersprache. ⚠



  • Welche Version von VS?

    Wenn Du reines C++ machen willst, nimm MFC oder wxWidgets!



  • Die Syntax ist in C++:

    ArrayTyp variable[size1][size2];
    

    Damit erstellst du ein natives array. In C++/CLI gibt es außerdem den generischen .Net-Arraytyp:

    array<int> myArray;  // gegebenenfalls schachteln
    


  • // Managed C++ 2003
    Object __gc *Foo __gc[,] = __gc new Object *__gc[8, 8]; // das ist dumm
    // C++/CLI
    cli::array<Object ^, 2> ^Bar = gcnew cli::array<Object ^, 2>(8, 8); // das ist gut
    


  • Danke für die schnellen Antworten... ich werde sie aber erst morgen ausprobieren können.

    Zur Version:

    Microsoft Development Environment 2003 Version 7.1.3088
    Microsoft .NET Framework 1.1 Version 1.1.4322
    Installed Products: Microsoft Visual C++ .Net

    Ich wollte nur mal .Net ausprobieren.. aber wenn es wirklich so kompliziert wird wie dass:

    // Managed C++ 2003
    Object __gc *Foo __gc[,] = __gc new Object *__gc[8, 8]; // das ist dumm
    // C++/CLI
    cli::array<Object ^, 2> ^Bar = gcnew cli::array<Object ^, 2>(8, 8); // das ist gut
    

    dann bleibe ich lieber beim normalen MVC++ 6.0.

    Grüsse



  • damit du mich nicht falsch verstehst: visual c++.net 2003 (7.1) ist ein wirklich guzter compiler, mit dem man angenehm arbeiten kann, solange man kein .net verwendet. du solltest also nicht mehr mit vc6 arbeiten. wenn du dich bereit fühlst, mit .net anzufangen, dann mach es mit c++/cli. du wirst feststellen, dass es sich bei einem mehrdim. array um eine art template handelt... 😉



  • wazzzup schrieb:

    dann bleibe ich lieber beim normalen MVC++ 6.0.

    Du bringst da was durcheinander!
    Managed C++ und C++/CLI gibt es in VC6 nicht! Somit kannst Du dies auch nicht mit VC6 vergleichen!

    Mit VS2002/2003/2005 kannst Du natürlich auch noch ganz normale C++ Programme erstellen, wie Du es mit VC6 gewohnt warst! Das andere sind neue Dinge, die auf dem .NET-Framework basieren...



  • aber selbst c++ bietet dir ne unterstuetzung fuer Arrays ...

    Aber eben nich wirklich fuer mehrdimensionale, weil mehrdimensionale Arrays sind eher nen logisches konstrukt aus der welt ausserhalb des Computers ^^ kannst du mehrdimensional speicher allocieren ?

    Zum glueck kann man dimensionen zurueckrechnen, und damit mehrdiminsionaltaet mit selber rechnen loesen (der compiler wuerde es auch rechnen)

    Also nen int Schachbrett[8][8]; wuerde ich zu nem int Schachbrett[64] machen.

    noch besser alles in ne klasse packen .... dann kannst den ganzen komfort schoen als members hinzubauen ....

    class ChessBoard
    {

    FieldType & getField(size_t x, size_t y);
    const FieldType & getField(size_t x, size_t y) const;
    private:
    FieldType mBoard[64];
    };

    Das ist eigentlich das was C++ ausmacht ....

    was sagt der Standard eigentlich , wenn man den index operator mehrdimensional macht ?

    also
    T & operator [] (size_t i1, size_t i2);

    Ciao ....



  • hmm laut standard ist operator[] ein binärer operator. d.h es gibt kein operator[] mit mehrdim. index. du kannst das über objekte realisieren. d.h du gibst ein objekt zurück, das widerum operator[] impolementert


Anmelden zum Antworten