我想編譯一些C++,我從一本書中得到我正在經歷,當我嘗試編譯時,我得到這個警告後跟5個相關的錯誤。如何確保我正在使用C++ 14?
main.cpp:16:9: warning: variable templates are a C++14 extension
[- Wc++14-extensions]
int table<RecordType>::CAPACITY;
^
我從來沒有想過更新C++或確定我使用的是什麼版本。我正在使用g ++在mac中編譯它。
我想編譯一些C++,我從一本書中得到我正在經歷,當我嘗試編譯時,我得到這個警告後跟5個相關的錯誤。如何確保我正在使用C++ 14?
main.cpp:16:9: warning: variable templates are a C++14 extension
[- Wc++14-extensions]
int table<RecordType>::CAPACITY;
^
我從來沒有想過更新C++或確定我使用的是什麼版本。我正在使用g ++在mac中編譯它。
您可以用-std=c++14
標誌啓用它。但是,您的GCC版本應該首先支持它。直到GCC 4.9.3
,你可以使用-std=c++1y
而自GCC 5.2
,它也支持C++ 14標誌。欲瞭解更多信息,請參閱this。
通過-std=c++14
標誌。還有部分C++ 14支持的舊版本,目前還不支持-std=c++14
;對於這些,通過-std=c++1y
標誌。
您需要告訴編譯器編譯哪個版本的標準。
嘗試g++ -std=c++14
。
雖然其他人推薦的-std=c++14
將啓用C++ 14功能支持,但它也會禁用默認啓用的一系列功能,包括對高級POSIX API的支持。
除非特別想禁用G ++的擴展,你應該使用-std=gnu++14
不-std=c++14
我寧可建議初學者通過'-std = C++ 14'關閉擴展(並編寫可移植代碼),直到它們到達需要使用它們的地步。 – Pixelchemist
@Pixelchemist:如果它只是語言擴展,我會同意你的看法。但是由於頭文件具有測試'_GNU_SOURCE'(應該被關閉)和'_XOPEN_SOURCE'(它不應該 - 但它是)測試的可移植性(單一Unix規範的一部分)庫函數。 –
我的評論認爲:相反,如果需要,可以使用標準C++而不是擴展名,如果需要的話,只能使用擴展名(或者爲了任何其他合理原因使用擴展名)。我不認爲POSIX實際上是徹頭徹尾的*便攜式*。 – Pixelchemist