2017-08-15 217 views
0

我正在研究一個cpp代碼,將一個應用程序從Windows移植到Mac。同時建立在Xcode它拋出的錯誤說該應用程序:使用未聲明的標識符'nothrow';你的意思是'扔'嗎?內存

"Use of undeclared identifier 'nothrow'; did you mean 'throw'? memory" 

這些錯誤是扔在CPP標準庫頭。

下面是錯誤堆棧描述:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/memory:83:8: Use of undeclared identifier 'nothrow'; did you mean 'throw'? 

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/string:48:10: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/string:48: 

我搜索在互聯網,但無法找到這個問題的解決方案。任何建議都會有所幫助。爲什麼錯誤是從系統頭文件中拋出的?

系統細節:

  • SDK是OSX 10.10。

  • 用來編譯應用程序

    編譯選項是C++標準庫:

    的libC++(LLVM C++標準和C++ 11的支持C++語言方言:。GNU ++ 11編譯器C++:蘋果LLVM 6.0

    在功能
+0

我最好的猜測是你需要指定你正在使用的C++標準 – Justin

+0

C++ 11支持是我正在使用的標準 – user2262462

+0

謝謝Praveen Kumar。 – user2262462

回答

0

的throw()規範在'11標準被棄用,並在'17標準中刪除。如果鐺不支持它,我的猜測是,這是對開發商部分有意選擇,或者你正在用C++ 17模式編譯。

正確在現代C++中要做的事情是使用noexcept規範。 noexcept允許更有效的代碼生成,因爲它不必對拋出的異常執行RTTI,而是如果從noexcept聲明的函數下面的調用幀拋出異常,則調用std :: terminate,將瘋狂的std :: unexpected()機制由'98標準指定。

+0

謝謝。代碼僅在C++ 11中編譯。爲什麼錯誤出現在C++庫內存文件中。同時下面提到的錯誤也來了。 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/locale:446:13:在語言環境文件中使用未聲明的標識符'__throw_bad_alloc'。 – user2262462