Объявить массив константных int в С++

У меня есть класс, и я хочу иметь несколько бит-масок со значениями 0,1,3,7,15,...

Итак, по существу, я хочу объявить массив констант int, например:

class A{

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

}

но компилятор всегда будет жаловаться.

Я пробовал:

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

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

Любая идея о том, как это можно сделать?

Спасибо!

Ответы

Ответ 1

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

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

Возможно, вам захочется еще раз зафиксировать массив в определении класса, но вам этого не нужно. Массив будет иметь полный тип в точке определения (который должен храниться внутри .cpp файла, а не в заголовке), где он может выводить размер из инициализатора.

Ответ 2

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

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};

Ответ 3

enum Masks {A=0,B=1,c=3,d=5,e=7};

Ответ 4

  • вы можете инициализировать переменные только в конструкторе или других методах.
  • "статические" переменные должны быть инициализированы из определения класса.

Вы можете сделать это:

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

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

Ответ 5

Ну, это потому, что вы не можете инициализировать частный член без вызова метода. Я всегда использую Списки инициализации членов для константных и статических элементов данных.

Если вы не знаете, что Списки инициаторов членов, они именно то, что вы хотите.

Посмотрите на этот код:

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

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

}

Также GCC имеет это классное расширение:

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.