Как включить C ++ 11 в Qt Creator?


167

Название довольно информативно. Я скачал Qt Creator 2.7.0 и пытаюсь скомпилировать базовый код C ++ 11:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

Я получаю следующую ошибку:

range based for loops are not allowed in c++ 98 mode

Тем не менее, согласно этой статье, эта версия Qt Creator поддерживает C ++ 11. Так как мне это включить?


3
Qt Creator не является компилятором. Когда вы читаете, что «Qt Creator поддерживает C ++ 11», это означает, что механизм завершения кода (в данном случае Clang) поддерживает синтаксис C ++ 11.
cmannett85

@ cmannett85 Qt Creator по-прежнему не использует Clang в качестве синтаксического анализатора C ++. Были попытки, но API Clang и общая производительность этого решения задержали это. Текущая работа в этом направлении находится здесь .
rubenvb

Ответы:


261

По данным этого сайта добавить

CONFIG += c++11

в ваш файл .pro (см. внизу этой веб-страницы). Требуется Qt 5.


Другие ответы, предлагая

QMAKE_CXXFLAGS += -std=c++11(или QMAKE_CXXFLAGS += -std=c++0x)

также работать с Qt 4.8 и gcc / clang.


4
Анонимные откаты никому не помогают. Что не так с ответом?
Али

Проблема заключалась в том, что я не смог удалить ваш дубликат / неполный ответ, все, что я мог сделать, это уменьшить его. Теперь, когда вы отредактировали его, чтобы сделать его более презентабельным, я доволен только понижением.
nurettin

9
@nurettin Спасибо за отзыв. Если вы внимательно изучите истории редактирования ответов (мои и другие), вы увидите, что мой первоначальный ответ не был дубликатом; это был фактически другой ответ, который бесстыдно украл часть моего ответа, сделав мой ответ похожим на дубликат. Тогда еще два повторных ответа появились в этом году. Проверьте это сами в истории редактирования. Учитывая эту информацию, вы бы пересмотрели свое отрицательное мнение?
Али

3
@Troyseph Вот мое понимание ситуации. Я предполагаю, что вы используете GCC. Если версия gcc поддерживает -std=c++11, то она также должна поддерживать (устаревший) -std=c++0xфлаг, и оба флага должны иметь идентичные эффекты (что, очевидно, не на вашем компьютере). Если компилятор поддерживает -std=c++0x, это не значит, что он понимает -std=c++11. Поэтому выбор -std=c++0xрежима по умолчанию для режима совместимости C ++ 11 является разумным выбором. На моей машине, по крайней мере, в соответствии со страницей руководства , -std=c++0xи -std=c++11идентичны.
Али

1
@Troyseph Теперь, это правда, что было бы лучше использовать, -std=c++11если компилятор поддерживает это, и Qt может быть достаточно умен, чтобы сделать это. Что ж, если эта проблема причинит вам столько вреда, вы можете отправить сообщение об ошибке ...
Али

32

Добавьте это в ваш .pro файл

QMAKE_CXXFLAGS += -std=c++11

или

CONFIG += c++11

18

В качестве альтернативы для обработки обоих случаев, рассмотренных в превосходном ответе Али, я обычно добавляю

# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){    
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}

в мои файлы проекта. Это может быть удобно, когда вас не особо волнует, какую версию Qt используют люди в вашей команде, но вы хотите, чтобы в любом случае они включили C ++ 11.


Это должно быть -std = c ++ 11
Предраг Манойлович

8

добавить в свой файл qmake

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11

4

Если вы используете более раннюю версию QT (<5), попробуйте это

QMAKE_CXXFLAGS += -std=c++0x

1

Единственное место, где я успешно справился, это поиск по:

... \ Qt \ {5,9; или ваша версия} \ mingw {53_32; или ваша версия} \ mkspecs \ win32-g ++ \ qmake.conf:

Тогда на линии:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Редактировать :

QMAKE_CFLAGS           += -fno-keep-inline-dllexport -std=c++11
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.