Como habilitar o C ++ 11 no Qt Creator?

167

O título é bastante auto-descritivo. Eu baixei o Qt Creator 2.7.0 e estou tentando compilar algum código C ++ 11 básico:

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

Estou recebendo o seguinte erro:

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

No entanto, de acordo com este artigo, esta versão do Qt Creator suporta C ++ 11. Então, como eu o habilito?

Andrey Chernukha
fonte
3
O Qt Creator não é um compilador. Quando você lê que "Qt Creator suporta C ++ 11", significa que o mecanismo de conclusão de código (neste caso Clang) suporta a sintaxe C ++ 11.
precisa saber é o seguinte
@ cmannett85 O Qt Creator ainda não usa o Clang como um analisador de sintaxe C ++. Houve esforços, mas a API de Clang e o desempenho geral desta solução atrasaram isso. O trabalho atual nessa direção está localizado aqui .
rubenvb

Respostas:

261

De acordo com este site, adicione

CONFIG += c++11

ao seu arquivo .pro (veja na parte inferior dessa página da web). Requer Qt 5.


As outras respostas, sugerindo

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

também trabalha com Qt 4.8 e gcc / clang.

Todos
fonte
4
Votos negativos anônimos não estão ajudando ninguém. O que há de errado com a resposta?
Ali
O problema era que não consegui excluir sua resposta duplicada / incompleta; tudo o que pude fazer foi reduzi-la. Agora que você o editou para torná-lo mais apresentável, estou feliz com apenas o voto negativo.
precisa saber é o seguinte
9
@ nettett Obrigado pelo feedback. Se você examinar cuidadosamente os históricos de edição das respostas (a minha e as outras), verá que minha resposta original não foi duplicada; na verdade, foi a outra resposta que descaradamente roubou parte da minha resposta, fazendo com que ela parecesse uma duplicata. Então, mais duas respostas duplicadas apareceram este ano. Verifique você mesmo nos históricos de edição. Dada essa informação, você reconsideraria seu voto negativo?
Ali
3
@Troyseph Aqui está o meu entendimento da situação. Estou assumindo que você está usando o gcc. Se uma versão do gcc suportar -std=c++11, também deverá suportar o -std=c++0xsinalizador (obsoleto) , e os dois sinalizadores deverão ter efeitos idênticos (o que aparentemente não é o caso em sua máquina). Se um compilador suportar -std=c++0x, isso não significa que ele entenda -std=c++11. Portanto, escolher -std=c++0xcomo padrão para o modo de compatibilidade C ++ 11 é uma escolha razoável. Na minha máquina, pelo menos de acordo com a página de manual , -std=c++0xe -std=c++11são idênticos.
Ali
1
@Troyseph Agora, é verdade que seria melhor usar -std=c++11se o compilador suportar, e o Qt poderia ser inteligente o suficiente para fazê-lo. Bem, se esta questão dói-lhe muito, você poderia enviar um relatório de bug ...
Ali
32

Adicione isso ao seu arquivo .pro

QMAKE_CXXFLAGS += -std=c++11

ou

CONFIG += c++11
LemonCool
fonte
18

Como alternativa para lidar com os dois casos abordados na excelente resposta de Ali, costumo acrescentar

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

aos meus arquivos de projeto. Isso pode ser útil quando você realmente não se importa muito com qual versão do Qt as pessoas estão usando em sua equipe, mas você deseja que elas tenham o C ++ 11 ativado em qualquer caso.

Яois
fonte
Este deve ser -std = c ++ 11
Predrag Manojlovic
8

adicione ao seu arquivo qmake

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

Se você estiver usando uma versão anterior do QT (<5), tente este

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

O único local em que consegui fazê-lo funcionar é pesquisando em:

... \ Qt \ {5,9; ou sua versão} \ mingw {53_32; ou sua versão} \ mkspecs \ win32-g ++ \ qmake.conf:

Então na linha:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Editar:

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