(Xcode) std::stoi и std ::to_string c 11 функций не распознаны

#c #xcode #macos #c 11

#c #xcode #macos #c 11

Вопрос:

Я запускаю Xcode 5.0 (5A1413) на Mac OSX 10.9.2. Он использует компилятор LLVM 5.0 по умолчанию. Я вижу следующие ошибки при попытке создать свой проект, где бы ни использовались std::to_string или std::stoi :

Нет элемента ‘to_string’ в пространстве имен std

Нет члена ‘stoi’ в пространстве имен std. Вы имели в виду atoi?

Я выполнил поиск в stackoverflow и нашел несколько сообщений, касающихся зависимости этих функций от c 11. Поэтому в моих настройках Xcode мои настройки сборки следующие:

Apple LLVM 5.0 — Языковые настройки:

  • Диалект языка C = «c11»
  • Диалект языка C = «C 11[-std=c 11]»
  • Стандартная библиотека C = «libc (стандартная библиотека LLVM C с поддержкой C 11)»

Я также попытался установить диалект языка C и стандартную библиотеку C соответственно по умолчанию. Результаты те же.

Я проверил свой набор инструментов. Когда я запускаю xcode-select -p

Я получаю:

/Приложения/Xcode.app/Содержимое / Разработчик

Полный путь к цепочке инструментов равен:

/Приложения/Xcode.app/Содержимое / Разработчик / Цепочки инструментов/XcodeDefault.xctoolchain/usr/ lib/c /v1

«Строка», определенная в подкаталоге toolchain, действительно имеет прототипы stoi и to_string функций. Итак, кажется, что я указываю на правильную цепочку инструментов. Очевидно, я здесь чего-то не хватает.

Был бы признателен за любую помощь в решении этой проблемы. Спасибо!

Комментарии:

1. Вы #include <string> ? И можете ли вы заставить XCode показать вам командную строку, которую он использует для вызова компилятора?

2. Вы включили файл заголовка? Почему бы вам не показать нам свой код?

3. @Praetorian Как мне заставить XCode показать мне командную строку, которую он использует для вызова компилятора? Как ни странно, наличие ‘#include <string>’, похоже, не имело значения.

4. Понятия не имею, никогда не использовал XCode.

5. @AndreyErick Проблемные области — это всего лишь однострочники, которые разбросаны по всему довольно большому файлу кода, поэтому показалось более эффективным просто показывать строки. Например, ‘command = std::to_string(port);’ где port — это uint16_t. Или ‘cseq = std::stoi (param);’ где param — это ‘строка’.