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 übersprungenwenn 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.
-
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

-
deine lösung merke ich mir mal für spätere zeiten...
dann muss ich nicht immer so rumackern.