Я медленно переношу свой код с 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