Domanda

Ho una classe e voglio avere alcune maschere bit con valori 0,1,3,7,15, ...

Quindi, in sostanza voglio dichiarare un array di int di costante come:

class A{

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

}

, ma il compilatore sempre lamentarsi.

ho provato:

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

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

Qualche idea su come questo può essere fatto?

Grazie!

È stato utile?

Soluzione

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

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

Si consiglia di fissare la matrice all'interno della definizione di classe già, ma non è necessario. La matrice avrà un tipo completo nel punto di definizione (che è quello di mantenere all'interno del file cpp, non nell'intestazione) dove può dedurre la dimensione dal inizializzatore.

Altri suggerimenti

// 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. È possibile inizializzare variabili solo nel costruttore o altri metodi.
  2. variabili 'statiche' devono essere inizializzate fuori della definizione della classe.

Si può fare questo:

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

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

Bene, questo è perché non è possibile inizializzare un membro privato senza chiamare un metodo. Io uso sempre Liste di inizializzazione membro di farlo per i membri const e dati statici.

Se non si sa cosa Liste di inizializzazione membro sono, Sono solo ciò che si vuole.

Guardate questo codice:

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

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

}

Anche GCC ha questa estensione cool:

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top