Pointer -> Dynamisches mehrdimensionales Array | Klassen Template



  • Hi,

    ich habe da so ein kleines Problem 😞
    Ich komme einfach nicht weiter und im Inet habe ich leider auch nicht wirklich was gefunden. Darum hoffe ich hier auf hilfe 😃

    Ich hab mir für meine Zwecke aus diesem Topic den Punkt 2 abgekupfert und angepasst.
    Ich habe aber ein Problem, wenn ich dort einen Pointer drauf Zeigen lassen möchte. Zu diesem Zweck hier mal ein Bsp.

    class Simple2DimArr
    {
        private:
            int* pArr;
            int Rows, Cols;
        public:
            Simple2DimArr(int Zeilen, int Spalten)
            {
                Rows = Zeilen;
                Cols = Spalten;
                // 2-Dimensionales Array auf 1-Dimensionales abbilden
                pArr = new int[Rows * Cols];
            }
            int* operator[](int int_tmp)
            {
                // Array liegt "zeilenweise" im Speicher
                return &pArr[int_tmp * Cols];
            }
            ~Simple2DimArr()
            {
                delete [] pArr;
            }
    };
    
    int main()
    {
        Simple2DimArr orig(3,3);
        Simple2DimArr *pointer;
    
        pointer = &orig;
    
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                //diese Zeile geht ohne probleme
                //i wird hier an die funktion oben als int_tmp übergeben
                cout<<orig[i][j];
                //diese Zeile crasht, sobald er i um eins erhöht.
                //hier wird auch j als int_tmp verwendet
                cout<<*pointer[i][j];
            }
            cout<<endl;
        }
        system("PAUSE");
        return 0;
    }
    

    Was mache ich mit meinem Pointer falsch???

    ---

    Wenn ich grade mal dabei bin, ich habe aus dem Array Code schnippsel ein Klassen Template angelegt. Das geht auch problemlos mit primitiven Datentypen. Wenn ich nun aber ein String oder andere Objekte dafür benutzen möchte, knallt mir das Prog um die Ohren. Hat hierzu jemand einen Tipp?

    ---

    Danke schon mal 😃

    mamut



  • versuche doch mal

    cout << (*pointer)[i][j] << endl;

    zu zweitens:
    Insgesamt ist es nicht so gut, einen pointer auf die Daten zurückzugeben. Da baut man sich eher eine Proxy-Klasse die sozusagen eine zeile darstellt und auch den op[] anbietet. Dann dürfte es besser klappen.



  • Ich danke dir!!!

    Na also 😃 so klappts dann auch mit dem Nachbarn.

    ---

    Ansich stimme ich dir zu, aber wofür ich dieses Template gerne butzen würde, wäre für strings.
    Wir habe ein Schulprojekt, wo wir ein Spielprogrammieren, was oben und auf der linken Seite Zahlen anzeigt und in der mitte ist ein Spielfeld.
    Das Spielfeld und die beiden Seiten stellen bei uns Matrixen da, eben diese dynamischen Array Templates. Das problem ist, die Zahlen sind natürlich ints. Aber das Spielfeld hätten wir gerne als Stringmatrix, da wir dort sowohl Farbcode, als auch Zahlen abspeichern müssen.
    Damit ich aber nicht 2 mal den selben Code habe, einmal für strings und für ints, wollte ich das gerne in einer Template Klasse realisieren. Aber mit den Strings geht das leider bei mir nicht 😞


Anmelden zum Antworten