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


Log in to reply