PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array im Konstruktor initialisieren



Poseidonius
14-11-2006, 18:57
Hallo zusammen,

ich möchte einfach nur ein array als Member einer Klasse anlegen und es entsprechend füllen. Aber nach unzähligen Versuchen weiss ich nun, dass es so oder so ähnlich nicht geht:


class Navigation{
Navigation();
char matrix[2][2];
}

Navigation::Navigation{
matrix={{1, 3},{2 5}};
}


Wie muss die Initialisierung denn richtig aussehen?

locus vivendi
14-11-2006, 19:44
Ich glaube du kommst nicht darum herum, das Array in einer Schleife zu füllen. Jedenfalls weiss ich im Moment keinen Weg wie sich das vermeiden lässt. Vielleicht fällt ja jemand anderem was ein.

Poseidonius
14-11-2006, 20:13
Oje, da hoffe ich auch drauf, denn in das Array gehört eine "Karte" die eben in einer solchen Form {{n11, n12 ...},{n21, n22 ...},{}, ...} vorliegt und durchaus auch größer sein kann ...

Ich könnte die Karte als globale Variable anlegen ... ist doch aber auch nicht schön.

almoeli
15-11-2006, 14:09
Hi,

wie wäre es das Array als static Member der Klasse zu deklarieren. Dann kannst du es direkt initialisieren.
Benötigt jede Instanz allerdings eine eigene Version des Arrays (weil es verändert wird und die anderen Klassen davon nichts mitbekommen sollen), dann musst du im Konstruktor das static Member Array in eine neu angelegtes umkopieren (das geht dann mit ner Schleife).

Gruß

almoeli

7.e.Q
16-11-2006, 07:30
Wie isses denn damit:


class Navigation{
Navigation();
char matrix[2][2];
}

Navigation::Navigation
: matrix={{1, 3},{2 5}}
{
}


Ich hab's jetzt nicht ausprobiert, aber müsste das nicht gehen?

nul
16-11-2006, 11:37
Soviel mir bekannt ist, ist die Zuweisung in der Art bei C:
{{1, 3},{2 5}}
nur beim anlegen der Variable erlaubt, aber bei C++ koennte das ja auch total anders sein.

7.e.Q
16-11-2006, 12:29
"beim Anlegen der Variable" heißt ja Initialisierung. Und die nimmst du bei Membervariablen von Klassen auf diese Weise im Kopf des Constructors vor. Du kannst sie nämlich nicht in der Klassendeklaration initialisieren. Das wiederum lässt C++ nicht zu.

panzi
18-11-2006, 13:28
Wie isses denn damit:


class Navigation{
Navigation();
char matrix[2][2];
}

Navigation::Navigation
: matrix={{1, 3},{2 5}}
{
}


Ich hab's jetzt nicht ausprobiert, aber müsste das nicht gehen?

Sollte das nicht eher so sein? Habs auch net probiert.


class Navigation{
Navigation();
char matrix[2][2];
}

Navigation::Navigation()
: matrix({{1, 3},{2 5}})
{
}

Kai__
25-11-2006, 20:30
Da fehlt nen ","

vielleicht isses das schon