Hilfe, habe BLACKOUT bei Arrays...



  • Aloha,

    habe zu wenig geschlafen, oder zu wenig alkohol zu mir genommen....

    Ich möchte ein int array initialisieren.

    int feld[20] = {1,2,3,4....,19};
    

    Das Feld soll eine Membervariable der Klasse sein.

    An welcher Stelle mach ich das ????

    In der Header meckert der Compiler, wenn ich dat schreibe.
    er meckert im Konstruktor.
    Wo zum Teufel schreibe ich die Ini-Liste hin ? 😡

    Ein zum Warten verdammter

    BOA



  • int feld[] = {1,2,3,4....,19};
    

    oder

    int feld[20];    
    feld[0oder1oder2bis19]=irgendeinintwert;
    

    meinst du das?



  • Aloha bums, 😉

    das erste ist im Prinzip genau das, was ich suche, bloß wo schreibe ich das in meine Klasse, um in den Methoden ggfs. darauf zugreifen zu können ?
    Das zweite ist klar, das will ich ja nicht, sondern ich will eine Initialisierungsliste verwenden.

    Wenn ich das erste aber nun verwende,bekomme aber immer eine Fehlermeldung.

    error C2059: Syntaxfehler : '{'
    error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen
    

    wenn ich den code als public Member deklariere.

    Ich habs schlicht vergessen, wo man ne ini-Liste hinschreibt. Und das war Kinderkacke, ich weiß es genau.... 🕶

    Grüße

    Ein momentan ratloser und vergeßlicher

    BOA



  • einmal statisch (enum hack wegen studio)

    einmal dynamisch

    class Array1{
    
    	enum {MAX=10};
    	int ar[MAX];
    public:	
    	Array1(){
    
    		for (int i=0; i<MAX; i++){
    			ar[i]=i;
    		}
    	}
    };
    
    class Array2{
    
    	int *pAr;
    	const int MAX;
    public:	
    	Array2(int dyn) : MAX (dyn){
    		pAr=new int (MAX);
    		for (int i=0; i<MAX; i++){
    			pAr[i]=i;
    
    		}
    	}
    
    	//deleten über destruktor nicht vergessen
    };
    


  • Aloha elise,

    danke für die Antwort.
    Ne hübsche Lösung, sicherlich. 👍
    Allerdings will ich das Rad nicht neu erfinden, sondern auf simple C++ - Grammatik zurückgreifen.

    Initialisierungsliste ist das Stichwort. Ich bin doch nicht der einzigste Mensch, der davon schon gehört hat, oder ? 😉

    Grüße

    BOA



  • hallo??

    da ist deine initialisierungsliste 😉

    das ist das, was nach dem einfachen doppelpunkt hinter dem konstruktor steht.

    was meinst du denn sonst damit?

    Konstruktor (parameter) : initialisierungsliste { implementierung }

    ----
    ps: du wirst den konstruktor der klasse wohl bemuehen müssen, dein array zu initialisieren.
    oder mach es statisch.

    ----
    ppps: und wennste mir nich glaubst, hier noch nen gescheiter link von nem klugen
    http://tutorial.schornboeck.net/initliste.htm
    so long



  • Aloha Elise,

    Du hast Recht, ich meine keine Ini-Liste. 🕶

    Wie zur Hölle heißt denn dieses Konstrukt hier ? 😕

    int feld[20] = {0,1,2,3,4....,19};
    

    Grüße

    BOA



  • Feldinitialisierung oder so... 'Nen besonderen Namen habe ich dafür noch nie gehört.



  • Das Ding geht halt nur, wenn du deine Variable Funktionslokal machst, nicht wenn du sie als Member einer Klasse machst.



  • @deus

    na das ist die Aussage, die ich eigentlich nicht hören wollte. 😞
    Mir war so, als ob das auch mit Membern ginge.

    Ich muß 160 int´s setzen, und wollte nicht ne ewig lange Liste schreiben

    feld[0] = 1;
    feld[1] = 3;
    feld[2] = 5499;
    ...
    

    sondern lieber

    feld[160] = {0,1,2,3...159}
    

    Aber wenn es net jeht, dann jeht es nicht...

    Grüße und Danke an alle

    BOA



  • Ich würde mit einer for-Schleife Werte aus einem statischen Array einkopieren. So ungefähr macht der Compiler das intern bei int foo[] = { ... } auch bloß, also tut das nicht weh.



  • Aloha Bashar,

    thx, finde ich ne gute Alternative...

    Teste ich gleich mal....

    Grüße

    BOA



  • Hab ich da was falsch verstanden oder könnt ihr kein cplusplus ?

    //Header-Datei
    class CTest
    {
    public:
    	CTest(void);
    	~CTest(void);
    
    public:
    	static const unsigned char Array1[4];
    	static const unsigned char Array2[7];
    };
    
    //Cpp-Datei
    const unsigned char CTest::Array1[4] = {0,1,2,3};
    const unsigned char CTest::Array2[7] = {0,1,2,3,4,5,6};
    
    CTest::CTest(void)
    {
    }
    
    CTest::~CTest(void)
    {
    }
    

    😋



  • er hat nicht gesagt, daß das feld static und const sein soll... 😉



  • ja das stimmt, aber er hat auch nicht gesagt, das das array veränderbar sein soll :D. ich dachte mir nur, da es bis jetzt noch niemand vorgeschlagen hat, tue ich es halt (vielleicht hätte ich den zweiten halbsatz weglassen sollen, sorry).



  • War vielleicht etwas undeutlich, aber ein statisches Array in deiner Art ist schon Teil meiner Lösung 🙂



  • @bashar

    deine lösung merke ich mir mal für spätere zeiten...

    dann muss ich nicht immer so rumackern.


Anmelden zum Antworten