Использование встроенной структуры

принимая во внимание этот обсуждение. У меня есть следующий код

list << (Database::ParameterX){"id_raw_tb", 100000};

Куда,

QList<Database::ParameterX> list;

а также

struct ParameterX {
QString name;
double max;
};

Но Qt Creator 3.3.0 подсказывает мне, что он не очень хорош, подчеркивая красным. Однако сообщений об ошибках нет, программа компилируется и запускается как положено.

Почему Qt Creator подчеркивает это?

1

Решение

Выражение действительно в C99 и C ++ 11, но не в C ++ 98. Возможно, программа проверки волнистой линии установлена ​​на C ++ 98, тогда как основной компилятор использует C ++ 11.

1

Другие решения

Выражение выглядит как «составной литерал» из 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, скорее всего, реализован для поддержки стандартного кода.

1

По вопросам рекламы [email protected]