Инициализация статического константного массива константных строк в C ++ - PullRequest
30 голосов
/ 30 июня 2011

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

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

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

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

Ответы [ 2 ]

51 голосов
/ 30 июня 2011

Прежде всего, вам нужен массив, а не указатель.

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"};

Обновление для C ++ 11 Теперь вы можете инициализировать членов непосредственно в определении класса:

const char * const days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "sun"};
16 голосов
/ 31 октября 2014

Для C ++ 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[];

Makeобязательно включите C ++ 11 , например, скомпилируйте с

g ++ -std = c ++ 11 week.cpp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...