Klassen Function mit zwei dim. Array als Parameter?!?



  • Wie lässt sich eine klassen Funftion mit eimem zwei dim. Array deklarier?

    ein Dimensional funz:

    class Pathfinding
    {
    	public:
    
    void sortieren(int *,int*,int*,int,int,int&);
    
    }pathfinding[1000];
    
    void Pathfinding ::sortieren(int Feld[],int  Feldx[],int Feldy[],int max,int clear,int& newmax)
    {
    


  • Das hängt davon ab, wie du das zweidimensionale Array darstellst. Am besten verwendest du dazu eine kapselnde Klasse, wenn möglich was Fertiges wie Boost.MultiArray...



  • es handelt sich um "normales" Array also
    z.b.:

    int Feld[10][10];
    

    So hätte ich es mir ungefähr vorgestellt.

    Function in der Klasse:

    void start_search(POINT &,POINT,int *[][]);
    

    Dekleration:

    void Pathfinding :: start_search(POINT &player,POINT ziel,int ar[][h])
    

    Brauchen würde ich es um ein Array in meiner Klasser die Daten zu zuweise.



  • Nimm int feld[10][10] , wobei du eine Dimension weglassen kannst. Wenn du beide Dimensionen nicht festlegen willst, nimm eine bessere Lösung wie boost::multi_array oder ein verschachtelter std::vector . Oder eine eigene Klasse, die ein 2D-Array dynamisch verwaltet und Zugriff kapselt (du kannst ein 2D-Array übrigens auf ein 1D-Array abbilden, ist vielleicht einfacher).



  • Du meinst so:

    void Pathfinding :: start_search(POINT &player,POINT ziel,int ar[10][10])
    

    Wäre kein problem ich weiß nur nicht wie ich es in der Klasse dekleriere.

    So würde es nicht simmen oder?:

    void start_search(POINT &,POINT,int (*ar)[]);
    

    Ich werds einmal mit einer gekapselten Klasse probieren 🙂



  • Wie wärs mit gleicher Signatur für Deklaration und Definition? 😉

    Übrigens sollst du nicht die Funktion, sondern das Array kapseln. Wenn du immer mit der gleichen Grösse arbeitest, reicht ein

    typedef int Spielfeld[10][10];
    

    Und sonst vielleicht sowas:

    class Array2D
    {
        public:
            Array2D(unsigned int breite, unsigned int hoehe);
            int& At(unsigned int x, unsigned int y);
    
        private:
            std::vector<int> array; // 2D auf 1D abbilden
    };
    


  • Typdef funz perfekt!!!
    danke für die ausführliche hilfe 😃


Anmelden zum Antworten