Подтвердить что ты не робот

Инициализация статического массива const строк const в С++

У меня возникла проблема с инициализацией постоянного массива константных строк.

От week.h(показывая только соответствующие части):

class Week {
  private:
    static const char *const *days = { "mon", "tue", "wed", "thur",
                                       "fri", "sat", "sun" };
};

При компиляции я получаю ошибку "лишние элементы в скалярном инициализаторе". Я попытался сделать его type const char **, считая, что я испортил второе размещение констант, но я получил ту же ошибку. Что я делаю неправильно?

4b9b3361

Ответ 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