Matrix als Member-Variable!

emma2000

Grünschnabel
Hallo!

Ich brauche eine Matrix, auf die als Member-Variable im gesamten Programm Zugriff erlaubt ist. Kann mir jemand sagen, wie das geht? Ich hab schon so einiges probiert, aber mein Rechner hat sich sogar geweigert, überhaupt ein mehrdimensionales Feld anzulegen...was muss ich denn da beachten? Da gibt es doch bestimmt eine schicke Klasse, die ich importieren kann, oder?
Kann das mal jemand für Doofe (also für mich...) erklären?

Und wehe, es lacht einer über meine "Super-Fragen" ... :rolleyes:

Schon mal jetzt vielen Dank für Eure Hilfe
 
Und wehe, es lacht einer über meine "Super-Fragen" ...

Dafür ist das Forum da um Fragen zu stellen...

Dein Problem:

Ein Mehrdimensionales Feld kann man sozusagen als rekursive Datenstruktur
auffassen: Jedes Feldelement der ersten Dimension enthält wiederum
ein Feld usw. Das kann man natürlich beliebieg schachteln.
Ein std::vector eignet sich dafür z.B. hervorragend:

Code:
#include <vector>
#include <iostream>

using namespace std;

class MatrixContainer{
        private:
                vector<vector<int> > v;
        public:
                MatrixContainer(int xSize, int ySize, int initValue){
                        v = vector<vector<int> >(xSize);
                        for(int i = 0; i < v.size(); i++){
                                v[i] = vector<int>(ySize); //erste Dimension mit vectoren die ints aufnehmen können füllen
                                for(int j = 0; j < v[i].size(); j++){
                                        v[i][j] = initValue;     //Matrix mit Initialwerten füllen
                                }
                        }
                }

                //überladen des operator<< um den ausgabestream zu beschreiben
                friend ostream& operator<<(ostream& cout, const MatrixContainer& toPrint){
                        for(int i = 0; i < toPrint.v.size(); i++){
                                for(int j = 0; j < toPrint.v[i].size(); j++){
                                        cout << toPrint.v[i][j] << "\t";
                                }
                                cout << endl;
                        }
                        return cout;
                }
};

int main(){
        MatrixContainer c(5,5,0);
        cout << c;
}

Gruß

RedWing
 
Mehrdimensionale Arrays kannst Du nur mit fester Größe anlegen:
Code:
char cMultiDimArray[3][5][7];
Das sollte eigentlich so gehen. Was hat denn beim Anlegen nicht geklappt?
Wenn Du auf Deine Variable (egal welchen Typs) von jeder Stelle des Codes Zugriff haben willst, dann mußt du sie global deklarieren (außerhalb der Klassen bei C++) und überall eine extern-Deklaration machen.
Bsp:
Code:
variable.c:
 int iGlobaleVariable;
 
 variable.h:
 extern int iGlobaleVariable;
Die Datei variable.h müßtest Du dann überall da einbinden, wo Du die globale Variable verwenden willst.

EDIT: Das ist allerdings nicht so ganz sauber (vor Allem in C++). Besser (aber eben auch umständlicher) wäre es, wenn Du die Variable immer dahin durchreichst, wo sie verwendet wird.
 
Zuletzt bearbeitet:
Zurück