Хотя вызов функции инициализации является одним из способов решения вашей проблемы, я подумал, что альтернатива может быть в порядке. Вот что вы можете сделать где-нибудь в файле .cpp
:
static const char * const init_ary[] = {
"Fred",
"Barney",
"Joe"
};
::std::vector< ::std::string> names(init_ary, init_ary+3);
Тогда у вас будет эта декларация в вашем .h
файле:
extern ::std::vector< ::std::string> names;
Но на самом деле лучше избегать глобальных переменных. Это серьезно плохие новости по целому ряду причин, некоторые не сразу очевидны. Например, они затрудняют тестирование вашего кода.
Это стоит того, чтобы казаться хитом «элегантного» дизайна, чтобы просто передать переменную каждой функции, чтобы избежать их. На самом деле, если вы начнете кодировать это, я уверен, что вы начнете видеть шаблоны, которые заставят вас переосмыслить части вашего дизайна, и в итоге вы получите нечто более приятное и более элегантное, чем ложная «элегантность», которую вы получаете от глобальных переменный дизайн.