Bagaimana cara mengaktifkan C ++ 11 di Qt Creator?

167

Judulnya cukup deskriptif diri. Saya telah mengunduh Qt Creator 2.7.0, dan saya mencoba mengkompilasi beberapa kode C ++ 11 dasar:

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

Saya menerima kesalahan berikut:

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

Namun, menurut artikel ini versi Qt Creator ini mendukung C ++ 11. Jadi bagaimana cara mengaktifkannya?

Andrey Chernukha
sumber
3
Qt Creator bukan kompiler. Ketika Anda membaca bahwa "Qt Creator mendukung C ++ 11" itu berarti bahwa mesin penyelesaian kode (bergantung pada kasus ini) mendukung sintaksis C ++ 11.
cmannett85
@ cmannett85 Qt Creator masih tidak menggunakan Dentang sebagai parser sintaks C ++. Ada upaya, tetapi API Clang dan kinerja umum dari solusi ini menunda ini. Pekerjaan saat ini dalam arah ini terletak di sini .
rubenvb

Jawaban:

261

Menurut situs ini tambahkan

CONFIG += c++11

ke file .pro Anda (lihat di bagian bawah halaman web itu). Ini membutuhkan Qt 5.


Jawaban lainnya, menyarankan

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

juga bekerja dengan Qt 4.8 dan gcc / dentang.

Ali
sumber
4
Downvotes anonim tidak membantu siapa pun. Apa yang salah dengan jawabannya?
Ali
Masalahnya adalah, saya tidak dapat menghapus jawaban duplikat / tidak lengkap Anda, yang bisa saya lakukan hanyalah menghapusnya. Sekarang setelah Anda mengeditnya untuk membuatnya lebih rapi, saya senang hanya dengan downvote.
nurettin
9
@nurettin Terima kasih atas umpan baliknya. Jika Anda memeriksa dengan saksama riwayat edit jawaban (saya dan yang lain), Anda akan melihat bahwa jawaban asli saya bukan duplikat; itu sebenarnya jawaban lain yang tanpa malu-malu mencuri bagian dari jawaban saya, membuat jawaban saya terlihat seperti duplikat. Kemudian dua jawaban rangkap lagi muncul tahun ini. Periksa sendiri di riwayat edit. Dengan informasi ini, apakah Anda akan mempertimbangkan kembali downvote Anda?
Ali
3
@Troyseph Inilah pemahaman saya tentang situasi ini. Saya berasumsi bahwa Anda menggunakan gcc. Jika versi gcc mendukung -std=c++11, maka itu juga harus mendukung -std=c++0xflag (yang sudah usang) juga, dan kedua flag tersebut seharusnya memiliki efek yang identik (yang tampaknya tidak berlaku pada mesin Anda). Jika kompiler mendukung -std=c++0x, itu tidak berarti ia mengerti -std=c++11. Oleh karena itu, memilih -std=c++0xsebagai default untuk mode kompatibilitas C ++ 11 adalah pilihan yang masuk akal. Di komputer saya, setidaknya menurut halaman manual , -std=c++0xdan -std=c++11identik.
Ali
1
@Troyseph Sekarang, memang benar bahwa akan lebih baik untuk digunakan -std=c++11jika kompiler mendukungnya, dan Qt bisa cukup pintar untuk melakukannya. Nah, jika masalah ini sangat menyakitkan bagi Anda, Anda dapat mengajukan laporan bug ...
Ali
32

Tambahkan ini ke file .pro Anda

QMAKE_CXXFLAGS += -std=c++11

atau

CONFIG += c++11
LemonCool
sumber
18

Sebagai alternatif untuk menangani kedua kasus yang dibahas dalam jawaban Ali yang luar biasa, saya biasanya menambahkan

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

ke file proyek saya. Ini bisa berguna ketika Anda tidak terlalu peduli tentang versi Qt mana yang digunakan orang dalam tim Anda, tetapi Anda ingin mereka mengaktifkan C ++ 11 dalam hal apa pun.

Яois
sumber
Ini harus -std = c ++ 11
Predrag Manojlovic
8

tambahkan ke file qmake Anda

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

Jika Anda menggunakan versi QT sebelumnya (<5) coba ini

QMAKE_CXXFLAGS += -std=c++0x
juga
sumber
1

Satu-satunya tempat saya berhasil membuatnya bekerja adalah dengan mencari di:

... \ Qt \ {5.9; atau versi Anda} \ mingw {53_32; atau versi Anda} \ mkspecs \ win32-g ++ \ qmake.conf:

Kemudian pada baris:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Edit:

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