Определение constexpr с областью действия, ограниченной одним файлом CPPC++

Программы на C++. Форум разработчиков
Anonymous
Определение constexpr с областью действия, ограниченной одним файлом CPP

Сообщение Anonymous »

Я медленно переношу свой код с DEFINE (старый способ C) на constexpr (способ C++). В этом случае я хочу определить переменную класса QStringLiteral для использования в моем коде, но видимую только в файле .CPP, в котором она определена. Я думал, что делаю это, используя ключевое слово static, но никак не могу скомпилировать это:

Код: Выделить всё

static constexpr QString Controller::s_min_qt_version       = "5.9.0";
Ошибка:

Код: Выделить всё

controller.cpp:52: error: the type ‘const QString’ of ‘constexpr’ variable ‘Controller::s_min_qt_version’ is not literal
Здесь есть аналогичный вопрос, но я не могу понять ответа. Означает ли этот ответ, что я ТАКЖЕ должен определить переменную в моем файле .h (поскольку это не фундаментальный тип)? Это немного больше работы, чем мне хотелось бы при замене одной строки DEFINE... но я хочу научиться.

ОБНОВЛЕНИЕ: Я попробовал использовать тип std: :string_view вместо QString, а затем ошибка изменится на:

Код: Выделить всё

controller.cpp:52: error: ‘constexpr const string_view Controller::c_min_qt_version’ is not a static data member of ‘class Controller’
Означает ли это, что я должен сначала определить это, а затем объявить? Что кажется неправильным... некоторые вопросы SO предполагают, что вы не можете объявить это статическим... но я знаю, что это неправильно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-cpp-file

Вернуться в «C++»