Вопрос

У меня есть класс, и я хочу иметь несколько битовых масок со значениями 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

Есть какие-нибудь идеи о том, как это можно сделать?

Спасибо!

Это было полезно?

Решение

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

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

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

Другие советы

// 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. вы можете инициализировать переменные только в конструкторе или другими методами.
  2. "статические" переменные должны быть инициализированы из определения класса.

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

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

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

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

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

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

    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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top