Использование необъявленного идентификатора nothrow; Вы имели в виду "бросить"? объем памяти

Я работаю над кодом cpp для переноса одного приложения с Windows на Mac. При создании приложения в XCode оно выдает ошибку, говорящую:

"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++ Standard Library:

    libC++(LLVM C++ Standard с поддержкой C++11. Диалект языка C++: GNU++11. Компилятор для C++: Apple LLVM 6.0

2 ответа

В моем случае эта проблема возникла только в режиме отладки. В результате отслеживания проблемы возникла та же ошибка, когда в заголовочном файле был объявлен следующий код. Код, объявленный в файле класса, не вызвал никаких проблем. Проблема решилась удалением кода, заявленного в заголовочном файле.

      #ifdef _DEBUG
#define new DEBUG_NEW
#endif

Надеюсь, это поможет кому-то, кто все еще борется с этой проблемой...

Спецификация throw() для функций устарела в стандарте '11 и удалена в стандарте '17. Если clang не поддерживает его, я предполагаю, что это был преднамеренный выбор со стороны разработчиков, или вы компилируете в режиме C++17.

В современном C++ правильно использовать спецификацию noexcept. noexcept позволяет более эффективно генерировать код в том смысле, что он не должен выполнять RTTI для сгенерированных исключений, вместо этого, если исключение выдается из фрейма вызова под объявленной функцией noexcept, вызывается std::terminate, закорачивая сумасшедший Механизм std:: непредвиденный (), определенный стандартом '98.

Другие вопросы по тегам