Frage

Ich habe eine Klasse, und ich möchte einige Bitmasken mit Werten haben 0,1,3,7,15, ...

So im Wesentlichen möchte ich wie eine Reihe von konstantem int ist deklarieren:

class A{

const int masks[] = {0,1,3,5,7,....}

}

aber der Compiler wird immer beschweren.

Ich habe versucht:

static const int masks[] = {0,1...}

static const int masks[9]; // then initializing inside the constructor

Jede Idee, wie kann dies geschehen?

Danke!

War es hilfreich?

Lösung

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, ... };

Sie können das Array innerhalb der Klassendefinition fixieren bereits, aber Sie müssen nicht. Das Array wird eine komplette Art an der Stelle der Definition hat (die innerhalb der CPP-Datei zu halten ist, nicht in der Kopfzeile), wo er die Größe vom Initialisierer ableiten kann.

Andere Tipps

// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
enum Masks {A=0,B=1,c=3,d=5,e=7};
  1. Sie können Variablen initialisieren nur im Konstruktor oder andere Methoden.
  2. ‚statische‘ Variablen müssen aus der Klassendefinition initialisiert werden.

Sie können dies tun:

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, .... };

Nun, das ist, weil Sie nicht über ein eigenes Mitglied ohne Aufruf einer Methode initialisieren. Ich benutze immer Memberinitialisierungsliste Listen tun, damit für konst und statische Datenelemente.

Wenn Sie nicht wissen, was Elementinitialisierung Listen sind, Sie sind genau das, was Sie wollen.

Sehen Sie in diesem Code:

    class foo
{
int const b[2];
int a;

foo():    b{2,3}, a(5) //initializes Data Member
{
//Other Code
}

}

Auch GCC hat diese coole Erweiterung:

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top