Ответ 1
Вы говорите, что вы сделали это в классе, как частную переменную.
Вспомним, что (на данный момент) переменные-члены не могут быть инициализированы в том же месте, где вы объявляете их (за некоторыми исключениями).
struct T {
std::string str = "lol";
};
не работает. Это должно быть:
struct T {
std::string str;
T() : str("lol") {}
};
Но, чтобы добавить оскорбление к травме, pre-С++ 0x, вы не можете инициализировать массивы в ctor-initializer
!:
struct T {
const unsigned int array[10];
T() : array({0,1,2,3,4,5,6,7,8,9}) {} // not possible :(
};
И поскольку ваши элементы массива const
, вы не можете полагаться на присваивание:
struct T {
const unsigned int array[10];
T() {
for (int i = 0; i < 10; i++)
array[i] = i; // not possible :(
}
};
Однако, как справедливо отметили некоторые другие участники, кажется мало смысла иметь копию массива для каждого экземпляра T
, если вы не можете изменять его элементы. Вместо этого вы можете использовать член static
.
Итак, следующее в конечном итоге решит вашу проблему в том, что — вероятно, лучший способ:
struct T {
static const unsigned int array[10];
};
const unsigned int T::array[10] = {0,1,2,3,4,5,6,7,8,9};
Надеюсь, что это поможет.