2015-01-30 2 views
0

Я пытаюсь инициализировать массив в классе заголовочный файл:Инициализировать массив в заголовочном файле C++

class C { 
    private: 
     static float p[26] = { 
      0.09, 0.02, 0.02, 0.04, 0.12, 0.02, 0.03, 
      0.02, 0.09, 0.01, 0.01, 0.04, 0.02, 0.06, 
      0.08, 0.02, 0.01, 0.06, 0.04, 0.06, 0.04, 
      0.02, 0.02, 0.01, 0.02, 0.01 
     }; 
... 

Я получаю следующее сообщение об ошибке (ы) с г ++:

C.h:15:33: error: a brace-enclosed initializer is not allowed here before ‘{’ token

C.h:20:9: sorry, unimplemented: non-static data member initializers

C.h:20:9: error: ‘constexpr’ needed for in-class initialization of static data member ‘p’ of non-integral type

Я вынужден использовать c++0x; как я могу определить этот массив, не делая p[0], p[1] и т. д.?

+2

Сделать 'constexpr' или инициализируйте его вне объявления класса. – user657267

+0

@ user657267 Когда я инициализирую его в конструкторе класса, я получаю: «ошибка: присвоение массиву из списка инициализаторов» – sheppardzw

+0

'вне объявления класса.' Не означает 'внутри конструктора', пожалуйста, ищите, как инициализировать статические элементы. – user657267

ответ

2

Вы можете объявить переменную static-члены class в заголовочном файле с помощью:

class C { 
    private: 
     static float p[26]; 
}; 

Вы можете определить его в файле .cpp с помощью:

float C::p[26] = { 
      0.09, 0.02, 0.02, 0.04, 0.12, 0.02, 0.03, 
      0.02, 0.09, 0.01, 0.01, 0.04, 0.02, 0.06, 
      0.08, 0.02, 0.01, 0.06, 0.04, 0.06, 0.04, 
      0.02, 0.02, 0.01, 0.02, 0.01 
     }; 
2

К сожалению, вы не можете инициализировать свои статические члены в объявлении класса (исключения выполняются для типов const const и const enum).

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

Таким образом, вы будете иметь:

// code in C.h 
class C { 
static float p[]; // declaration of C::p 
} 

и

// code in C.cpp 
float C::p[] = { /* put your numbers here */ }; // definition of C::p 

Если термины "декларация" и "определение" путают к вам, читайте ответы на this question.

Смежные вопросы