Инициализация статического массива const строк const в С++
У меня возникла проблема с инициализацией постоянного массива константных строк.
От week.h(показывая только соответствующие части):
class Week {
private:
static const char *const *days = { "mon", "tue", "wed", "thur",
"fri", "sat", "sun" };
};
При компиляции я получаю ошибку "лишние элементы в скалярном инициализаторе". Я попытался сделать его type const char **, считая, что я испортил второе размещение констант, но я получил ту же ошибку. Что я делаю неправильно?
Ответы
Ответ 1
Прежде всего, вам нужен массив, а не указатель.
static const char * const days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Во-вторых, вы не можете инициализировать это непосредственно внутри определения класса. Внутри определения класса оставьте только это:
static const char * const days[]; //declaration
Затем в файле .cpp напишите определение
const char * const Week::days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Обновление для С++ 11 Теперь вы можете инициализировать членов непосредственно в определении класса:
const char * const days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Ответ 2
Для С++ 11 может выполнить инициализацию внутри вашего объявления класса в файле .h. Однако вам нужно будет включить constexpr в файл .cpp. Пример для вышеприведенного случая:
В файле week.h напишите:
class Week {
public:
static const constexpr char* const days[] =
{ "mon", "tue", "wed", "thur","fri", "sat", "sun" };
};
В файле week.cpp напишите где-нибудь:
constexpr const char* const Week::days[];
Убедитесь, что вы включили С++ 11, например. скомпилировать с помощью
g++ -std = С++ 11 week.cpp