Объявить массив константных 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.