Im Konstruktor kein Array???
-
Hallo Leute,
Ich kann irgendwie in meinem Konstruktor kein Array aufrufen.Woran kann das liegen.Oder geht das in c++ gar nicht??? Und falls es nicht geht.Wie kann ich dann trotzdem n Array aufrufen...
class test { private: int v[4][3]; public: test(); .... }; test::test() { v[4][3] ={{0,1,0},(2,3,1},{2,2,2},{0,1,1}}; }
Kriege diese Fehlermeldungen;
error: expected `;' before '{' token
error: expected primary-expression before '{' tokenDanke für eure Antworten....
-
Ich nehme einmal an, dass du das Array initialisieren willst.. Das geht aber nur bei der Deklaration des Arrays, was innerhalb einer Klasse nur in der Initialisierungsliste gehen würde. Allerdings funktioniert das in C++ tatsächlich nicht mit Arrays. Du brauchst da also wirklich eine Schleife zum befüllen.
Aber du kannst einfachheitshalber im ctor ein temporäres Array erstellen und dann einfach jedes Element kopieren. Dann hast du die bequeme Initialisierung auch.
-
Oder Container ganz bequem mit
boost::assign::list_of
befüllen. Vielleicht ist das nicht angebracht im Moment, doch du kannst es mal im Hinterkopf behalten...Aber musst du wirklich für jede Instanz das gleiche Array haben? Könnte dieses nicht statisch sein? Oder wie unterscheiden sich die einzelnen Instanzen?
-
Die Zuweisung:
v[4][3] = //...
Verweisst an das eine Element (4 | 3) des zweidimensionalen Arrays. Eine Alternative waere soetwas:
v[0][0] = 0; v[0][1] = 1; v[0][2] = 0; v[1][0] = 2; v[1][1] = 3; v[1][2] = 1; v[2][0] = 2; v[2][1] = 2; v[2][2] = 2; v[3][0] = 0; v[3][1] = 1; v[3][2] = 1;
-
Oder wie gesagt so:
int temp[4][3] = {{0,1,0},{2,3,1},{2,2,2},{0,1,1} }; for ( int x = 0; x < 4; ++x ) for ( int y = 0; y < 3; ++y ) v2[x][y] = temp[x][y];
-
Super ich danke euch...
Hat alles geklapptDanke drakon nochmal für das Beispiel.
Ich hatte am Anfang nicht ganz verstanden was du meinst, aber jetzt ist alles klar wie Kloßbrühe@Nexus: Ich werde mir das irgendwann nochmal anschauen. Aber nur aus Neugier:
Hat das irgendnen Vorteil, wenn ich dieses boost.. nehme?
Für mein Miniprogramm macht das sicher keinen Unterschied, aber kann man
da für größere Programme was an Rechenzeit sparen??
-
Nein, Rechenzeit spart man keine. Es sieht dann nur etwas schöner aus (hier mit STL-Containern). Statt
std::vector<int> Vec; Vec.push_back(2); Vec.push_back(7); Vec.push_back(4); Vec.push_back(3); Vec.push_back(0);
kann man Folgendes schreiben:
std::vector<int> Vec = boost::assign::list_of(2)(7)(4)(3)(0);