einem int array werte zuordnen
-
hallo
ich hab in einem header-file in ner klasse ein int-array deklariert.
nun wollte ich im kontruktor dem array werte zuordnen. tja und da bin ich dann draufgekommen, das ich nich weiß wie ich das mache.
ich dachte, das das mit "wert[] = {0x0003,0x1352,0x4A43 ... 0x23FF};"
im header hab ich: " int wert[4096];
funktionieren wuerde. pustekuchen. dem war nich so.
konnt mir das jemand sagen bitte ?Meep Meep
-
1. soweit ich das seheversuchst du in deinem besispiel hexadezimalwerte einem integer zu übergeben. glaube net das c++ das so einfach umwandelt!
2. ich kenne die schreibweise nicht mit der du die einzelnen werte zuordnest (heisst jnicht das die falsch ist)
-
Hallo,
natuerlich kannst du Variablen auch Hexadezimale Werte zuweisen. Diesen Wert muss
immer ein '0x' vorangestellt sein, so wie bei Oktal Werten eine fuehrende '0'
vor der Zahl stehen muss.Und nein, ich wuesste nicht, dass du ein Array nachtraeglich so initialisieren
kannst. Du musst es entweder initialisieren oder die Werte per Hardcode oder
Eingabe dem entsprechenden Arrayindex zuweisen.mfg
v R
-
@virtuell Realisticer
aber in einer klasse kann ich ja keine werte bei der initialisierung angeben.
das geht fruehestens im konstruktor.
und per wert[0] = 0x003; wert[1] = 0x1352; .... waere schon ein bisschen n großer aufwand. oder wie hast das per hardcode gemeint ?Meep Meep
-
Ja, so hatte ich das gemeint. Ich wuesste sonst keinen Weg. Wenn es sich um
eine static-Variable handelt, koenntest du sie initialisieren (da du das ja
eh mit static-Variablen machen musst), aber sonst wuesste ich nicht wie.Vielleicht weiss ja einer unserer Cracks ob man es besser machen kann
Sry, wenn ich dir nich direkt helfen kann.
mfg
v R
-
in einer header datei eine definition aufzubewahren kann aber einen schlechten nachgeschmack haben, vor allem, wenn mehr als eine übersetzungseinheit diese datei inkludiert. Dann wird für jede dieser übersetzungseinheiten (entsprechen idR deinen .cpp Dateien) versucht, Speicher für das Array zu reservieren.
Das führt dann zu Linkerfehlern: Welche Übersetzungseinheit stellt denn jetzt den Speicher dafür?
Lösung: In Header Dateien sollen nur Deklarationen (und einiges anderes ist auch erlaubt, jetzt aber unwichtig). Das erreichst du mit dem Schlüsselwort "extern": Der Speicher wird von einer anderen Übersetzungseinheit zur Verfügung gestellt.//deine headerdatei: extern int wert[]; //deklaration //eine cpp datei: int wert[] definieren: #include "headerdatei" int wert[1024] = { 0xFF02, 0xFF01, 0xFF11 }; //Definition: Bereitstellung //von speicher; deklaration + initialisierung //andere cpp dateien: int wert[] benutzen: #include "headerdatei" cout << wert[0]; //gibt aus 0xFF02 (in dezimal) wert[102] = 1002; //zuweisung //in dieser datei keine definition.
-
Er redet aber von einem Konstruktor, deswegen gehe ich mal davon aus, dass
es sich um eine Membervariable handelt.Dort wuesste ich nicht, wie er die Variable so definiert, wie du es gemacht
hast, es sei denn sie ist eine static-Membervariable.Oder gibs da doch ne Moeglichkeit?
Ansonsten wuerd ich es genau so machen, wie du es beschrieben hast.
mfg
v R