принимая во внимание этот обсуждение. У меня есть следующий код
list << (Database::ParameterX){"id_raw_tb", 100000};
Куда,
QList<Database::ParameterX> list;
а также
struct ParameterX {
QString name;
double max;
};
Но Qt Creator 3.3.0 подсказывает мне, что он не очень хорош, подчеркивая красным. Однако сообщений об ошибках нет, программа компилируется и запускается как положено.
Почему Qt Creator подчеркивает это?
Выражение действительно в C99 и C ++ 11, но не в C ++ 98. Возможно, программа проверки волнистой линии установлена на C ++ 98, тогда как основной компилятор использует C ++ 11.
Выражение выглядит как «составной литерал» из C99, который не будет работать в C ++.
Вы можете изменить это на:
Database::ParameterX param = {"id_raw_tb", 100000};
list << param;
Или, если вы хотите использовать его встроенным, вы можете определить конструктор для вашей структуры, так что вы можете написать:
list << Database::ParameterX("id_raw_tb", 100000);
Редактировать:
В C ++ 11 это также должно работать (с синтаксисом «равномерной инициализации»):
list.append({"id_raw_tb", 100000});
Изменить 2:
Что касается того, почему он компилируется: я попробовал это с GCC 4.8, и он действительно компилируется, но когда вы включаете «-pedantic», он скажет вам:
warning: ISO C++ forbids compound-literals
Так что это особенность GCC, и она может не скомпилироваться с другими компиляторами. И QtCreator, скорее всего, реализован для поддержки стандартного кода.