¿Cómo habilitar C ++ 11 en Qt Creator?

167

El título es bastante descriptivo. He descargado Qt Creator 2.7.0, y estoy tratando de compilar un código básico de C ++ 11:

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

Recibo el siguiente error:

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

Sin embargo, según este artículo, esta versión de Qt Creator es compatible con C ++ 11. Entonces, ¿cómo lo habilito?

Andrey Chernukha
fuente
3
Qt Creator no es un compilador. Cuando lee que "Qt Creator es compatible con C ++ 11" significa que el motor de finalización de código (Clang en este caso) es compatible con la sintaxis de C ++ 11.
cmannett85
@ cmannett85 Qt Creator todavía no usa Clang como analizador sintáctico de C ++. Hubo esfuerzos, pero la API de Clang y el rendimiento general de esta solución retrasaron esto. El trabajo actual en esta dirección se encuentra aquí .
rubenvb

Respuestas:

261

Según este sitio agregue

CONFIG += c++11

a su archivo .pro (vea al final de esa página web). Requiere Qt 5.


Las otras respuestas, sugiriendo

QMAKE_CXXFLAGS += -std=c++11(o QMAKE_CXXFLAGS += -std=c++0x)

También funciona con Qt 4.8 y gcc / clang.

Ali
fuente
44
Los votos negativos anónimos no están ayudando a nadie. ¿Qué hay de malo con la respuesta?
Ali
El problema era que no podía eliminar tu respuesta duplicada / incompleta, todo lo que podía hacer era rechazarla. Ahora que lo ha editado para hacerlo más presentable, estoy contento con solo el voto negativo.
nurettin
9
@nurettin Gracias por los comentarios. Si examina detenidamente los historiales de edición de las respuestas (la mía y las demás), verá que mi respuesta original no era un duplicado; En realidad, fue la otra respuesta la que robó descaradamente parte de mi respuesta, haciendo que mi respuesta pareciera un duplicado. Luego aparecieron dos respuestas duplicadas más este año. Compruébelo usted mismo en las historias de edición. Dada esta información, ¿reconsideraría su voto negativo?
Ali
3
@ Troyseph Aquí está mi comprensión de la situación. Supongo que está utilizando gcc. Si una versión de gcc es compatible -std=c++11, también debería ser compatible con el -std=c++0xindicador (en desuso) , y se supone que ambos indicadores tienen efectos idénticos (que aparentemente no es el caso en su máquina). Si un compilador es compatible -std=c++0x, no significa que lo comprenda -std=c++11. Por lo tanto, elegir de -std=c++0xforma predeterminada el modo de compatibilidad de C ++ 11 es una opción razonable. En mi máquina, al menos según la página de manual , -std=c++0xy -std=c++11son idénticos.
Ali
1
@Troyseph Ahora, es cierto que sería mejor usarlo -std=c++11si el compilador lo admite, y Qt podría ser lo suficientemente inteligente como para hacerlo. Bueno, si este problema te duele tanto, podrías presentar un informe de error ...
Ali
32

Agregue esto a su archivo .pro

QMAKE_CXXFLAGS += -std=c++11

o

CONFIG += c++11
LemonCool
fuente
18

Como alternativa para manejar ambos casos abordados en la excelente respuesta de Ali, generalmente agrego

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

a mis archivos de proyecto. Esto puede ser útil cuando realmente no le importa mucho qué versión de Qt usan las personas en su equipo, pero desea que tengan habilitado C ++ 11 en cualquier caso.

Яois
fuente
Esto debería ser -std = c ++ 11
Predrag Manojlovic
8

agregar a su archivo qmake

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11
guardezi
fuente
4

Si está utilizando una versión anterior de QT (<5) intente esto

QMAKE_CXXFLAGS += -std=c++0x
asloob
fuente
1

El único lugar donde lo hice funcionar con éxito es buscando en:

... \ Qt \ {5.9; o su versión} \ mingw {53_32; o su versión} \ mkspecs \ win32-g ++ \ qmake.conf:

Luego en la línea:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Editar:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport -std=c++11
Bretzelus
fuente