Я немного разбираюсь в главе 10 «Принципов и практики» Страуступа, где он предлагает создать таблицу для преобразования чисел месяцев в их имена и наоборот. Эта таблица находится в виде вектора строки, который затем используется несколькими функциями, объявленными в файле заголовка программы. Я попытался пройти легкий путь и объявить + инициализации вектора в том же заголовке, так что все функции могли видеть:Инициализировать строковый вектор в заголовочном файле
std::vector<std::string> monthNames(12);
monthNames[0] = "jan";
monthNames[1] = "feb";
monthNames[2] = "mar";
monthNames[3] = "apr";
monthNames[4] = "may";
monthNames[5] = "jun";
monthNames[6] = "jul";
monthNames[7] = "aug";
monthNames[8] = "sep";
monthNames[9] = "oct";
monthNames[10] = "nov";
monthNames[11] = "dec";
Теперь G ++, кажется, не понимают, что я пытаюсь сделать:
In file included from temperature.cpp:1:
./Temperature.h:48:1: error: C++ requires a type specifier for all declarations
monthNames[0] = "jan";
^~~~~~~~~~
./Temperature.h:49:1: error: C++ requires a type specifier for all declarations
monthNames[1] = "feb";
...
Я понимаю, в общем, что объявить глобальный вектор в заголовке является плохой практикой, но в данном примере это представляется разумным заменителем 12 {если ...} в вернулись на Родину функций, которые преобразовывают Nums к месяцам и наоборот:
const std::string& intToMonth(int num) {
if (num < 1 || num > 12)
throw BadMonthException();
return monthNames[num-1];
}
У меня есть два вопроса:
1) Почему компилятор не разрешил мне инициализировать вектор?
2) Есть ли более сексуальный способ заставить все это работать (без глобального вектора)?
Я предполагаю, что вы '#include' и '#include '? –
CoryKramer
Предоставьте [MCVE] (http://stackoverflow.com/help/mcve). Кроме того, какие версии компилятора и стандартной библиотеки вы используете? – Drop
@Cyber Это не похоже на вопрос C++ 11. Просто FYI. – Blacktempel