ChatGPT解决这个技术问题 Extra ChatGPT

How to enable C++11 in Qt Creator?

The title is pretty self-descriptive. I've downloaded Qt Creator 2.7.0, and I am trying to compile some basic C++11 code:

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

I'm receiving the following error:

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

Yet, according to this article this version of Qt Creator supports C++11. So how do I enable it?

Qt Creator is not a compiler. When you read that "Qt Creator supports C++11" it means that the code-completion engine (Clang in this case) supports C++11 syntax.
@cmannett85 Qt Creator still does not use Clang as a C++ syntax parser. There were efforts, but Clang's API and general performance of this solution delayed this. Current work in this direction is located here.

A
Ali

According to this site add

CONFIG += c++11

to your .pro file (see at the bottom of that web page). It requires Qt 5.

The other answers, suggesting

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

also work with Qt 4.8 and gcc / clang.


Anonymous downvotes aren't helping anybody. What's wrong with the answer?
The problem was, I wasn't able to delete your duplicate/incomplete answer, all I could do was to downvote it. Now that you have edited it to make it more presentable, I am happy with just the downvote.
@nurettin Thanks for the feedback. If you examine carefully the edit histories of the answers (mine and the others), you will see that my original answer was not a duplicate; it was actually the other answer that shamelessly stole part of my answer, making my answer look like a duplicate. Then two more duplicate answers appeared this year. Check it for yourself in the edit histories. Given this information, would you reconsider your downvote?
@Troyseph Here is my understanding of the situation. I am assuming that you are using gcc. If a version of gcc supports -std=c++11, then it should also support (the deprecated) -std=c++0x flag as well, and both flags are supposed to have identical effects (which apparently isn't the case on your machine). If a compiler supports -std=c++0x, it doesn't mean that it understands -std=c++11. Therefore, picking -std=c++0x as default for C++11 compatibility mode is a reasonable choice. On my machine, at least according to the man page, -std=c++0x and -std=c++11 are identical.
@Troyseph Now, it is true that it would be better to use -std=c++11 if the compiler supports it, and Qt could be smart enough to do so. Well, if this issue hurts you that much, you could file a bug report...
G
Guilherme Nascimento

Add this to your .pro file

QMAKE_CXXFLAGS += -std=c++11

or

CONFIG += c++11

Я
Яois

As an alternative for handling both cases addressed in Ali's excellent answer, I usually add

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

to my project files. This can be handy when you don't really care much about which Qt version is people using in your team, but you want them to have C++11 enabled in any case.


This should be -std=c++11
g
guardezi

add to your qmake file

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

a
asloob

If you are using an earlier version of QT (<5) try this

QMAKE_CXXFLAGS += -std=c++0x

B
Bretzelus

The only place I have successfully make it work is by searching in:

...\Qt\{5.9; or your version}\mingw{53_32; or your version}\mkspecs\win32-g++\qmake.conf:

Then at the line:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Edit :

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