Определение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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