Як увімкнути 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 Кланг та загальна ефективність цього рішення затримали це. Поточна робота в цьому напрямку розміщена тут .
rubenvb

Відповіді:


261

За даними цього сайту додайте

CONFIG += c++11

до вашого .pro-файлу (див. унизу цієї веб-сторінки). Це вимагає Qt 5.


Інші відповідають, напрошуючи

QMAKE_CXXFLAGS += -std=c++11(або QMAKE_CXXFLAGS += -std=c++0x)

також працювати з Qt 4.8 та gcc / clang.


4
Анонімні голоси не допомагають нікому. Що не так у відповіді?
Алі

Проблема полягала в тому, що я не зміг видалити ваш дублікат / неповну відповідь. Все, що я міг зробити, це спростувати його. Тепер, коли ви відредагували це, щоб зробити його більш презентабельним, я задоволений лише суворою заявою.
Нуреттін

9
@nurettin Дякую за відгук. Якщо уважно вивчити історію редагування відповідей (моїх та інших), ви побачите, що моя оригінальна відповідь не була дублікатом; насправді інша відповідь безсоромно вкрала частину моєї відповіді, зробивши мою відповідь дублікатом. Тоді ще дві повторювані відповіді з’явилися цього року. Перевірте це в історії редагування. З огляду на цю інформацію, ви б переглянули свій голос?
Алі

3
@Troyseph Ось моє розуміння ситуації. Я припускаю, що ви використовуєте gcc. Якщо версія gcc підтримує -std=c++11, то вона також повинна підтримувати (застарілий) -std=c++0xпрапор, і обидва прапори повинні мати однакові ефекти (що, мабуть, не на вашій машині). Якщо компілятор підтримує -std=c++0x, це не означає, що він розуміє -std=c++11. Отже, вибір -std=c++0xза замовчуванням для режиму сумісності C ++ 11 є розумним вибором. На моїй машині, принаймні, відповідно до сторінки man , -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
Предраг Манойлович


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.