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 '{' token

    Danke 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 geklappt

    Danke 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);
    

Anmelden zum Antworten