Frage zu Programmaufbau/Typenverwendung [Array]



  • Hi.
    Eigentlich bin ich wirklich kein Anfänger mehr was programmieren angeht.
    Jedoch bisher hauptsächlich Java und C++ treibt mich teilweise in den Wahnsinn.

    Könnt ihr mir einfach mal einen prinzipiellen Tipp geben?!

    Ich wollte eine Klasse Matrix schreiben mit folgenden Eigenschaften:

    class Matrix
    {
    	public:
    		Matrix(int rows,int columns);
    		~Matrix();
    	private:
                    int the_matrix[][];
    };
    

    Wie die meisten wahrscheinlich schon gesehen haben, liegt das Problem in dem
    privaten Datenelement the_matrix[][];.
    Ich hatte ursprünglich vor, die Matrix im Konstruktor zu initialisieren.

    Matrix::Matrix(int rows,int columns)
    {
    the_matrix[rows][columns];
    }
    

    Aber aaarrhhh es geht ja nicht, weil ein Array seine Grösse bereits bei der deklaration mitgeteilt bekommen muss.
    Also dürfte the_matrix nicht als private variable auftauchen?!

    Wie soll ich das dann also machen?!
    Es ist leider nicht das erste mal das ich an solchen absoluten trivialitäten scheitere 😞

    Irgendwelche Ideen, Tipps?! Wäre sehr dankbar.



  • Moin,

    ja der erste Tipp von mir ist: Anstaendige Ueberschrift bitte! Leute ist das echt so
    unglaublich schwer? Ich kann es nicht verstehn.

    Zu deinem Problem:

    Du definierst dir das als Zeiger auf Zeiger:

    int** the_matrix;
    

    Und dann im CTor entsprechend Speicher anfordern:

    the_matrix = new int*[rows];
    for(size_t i(0); i < rows; ++i)
        the_matrix[i] = new int[columns];
    

    mfg
    v R



  • Mach aus the_matrix einen Pointer auf int und reserviere den Speicher mit new im Konstruktor.

    Behalte im Hinterkopf, dass man Arrays mit delete [] freigeben sollte, nicht nur mit delete.



  • Folgnder Ansatz

    Die Gesammtgroesse ist Max_Zeilen * Max_Spalten gebenen. Du kannst also entweder ein Array von der entsprechenden Groesse allocieren oder den Vector benutzen und mit der Gesamtgroesse initalisieren. Den Zugriff kannst Du dann schnell berechnen.



  • Danke für eure Antworten.
    @ virtuell: Hast recht, mich nervt sowas sonst auch immer :).
    Deswegen [edit!]







  • 😃


Anmelden zum Antworten