В пространстве имен std нет участника с именем stoi

Я тестирую функцию std::stoi, найденную по приведенной ниже ссылке: http://en.cppreference.com/w/cpp/string/basic_string/stol
, но я получил сообщение об ошибке:

В пространстве имен std нет участника с именем stoi.

Что я должен делать? Пожалуйста, посоветуйте спасибо.

P.S: Я использую Xcode Ide для работы с C ++.

#include <iostream>
#include <string>

int main()  {
   std::string test = "45";
   int myint = std::stoi(test);
   std::cout << myint << '\n';
}

Изображение

нет участника с именем stoi в пространстве имен 'std'

error


person user2211678    schedule 20.10.2013    source источник
comment
Вы компилировали с -std=c++11?   -  person 0x499602D2    schedule 20.10.2013
comment
Я в этом сомневаюсь. и я не уверен, как и где проверить, скомпилировал ли я с -std = c ++ 11.   -  person user2211678    schedule 20.10.2013


Ответы (3)


Прежде всего, вам нужен компилятор, поддерживающий C ++ 11, и вам необходимо компилировать в «режиме C ++ 11» (в некоторых случаях).

Во-вторых, если это на самом деле проблема intellisense (а похоже, что так оно и есть), возможно, ваша IDE еще не поддерживает C ++ 11.

person Lightness Races in Orbit    schedule 20.10.2013
comment
У меня есть поддержка C ++ 14, и у меня такая же проблема. Это явно связано с CLang или его компонентами. Но ничего общего с настройкой языковой версии. - person Pablo Ariel; 22.08.2018
comment
@PabloAriel Вы, наверное, что-то упустили. Хотя есть пробелы в поддержке C ++ 17 в Xcode (например, нет std::optional) даже в режиме C ++ 17, C ++ 14 уже достаточно стар, и я не знаю, что поддержка такого ядра, как std::stoi, отсутствует. - person Lightness Races in Orbit; 22.08.2018
comment
Проблема возникает из-за этого: #if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) Однако никто не упомянул решение, кроме определения _GLIBCXX_USE_C99, и никто не объяснил, почему я должен добавлять такое определение вручную (хотя для меня это выглядит как ошибка). - person Pablo Ariel; 22.08.2018
comment
@PabloAriel На самом деле не совсем понятно, о чем вы говорите, или что вы пытаетесь сделать, или какую платформу / набор инструментов / конфигурацию вы используете. Предлагаю собрать необходимую информацию и задать новый вопрос. Маловероятно, что это ошибка в чем-либо, кроме вашего собственного кода / конфигурации. coliru.stacked-crooked.com/a/ccda550cce24a6c9 - person Lightness Races in Orbit; 23.08.2018
comment
Маловероятно, что в моем коде больше ошибок, чем в MLoC кодовой базы, создающей визуальную студию в сочетании с Android ndk и clang. Кроме того, я активно использую функции C ++ 14 и C ++ 17, поэтому нет никакого смысла, что он терпит неудачу только со stoi. Вы можете найти #if, которые я процитировал, в ‹basic_string.h› строке 2847 или около того. Также похоже, что у многих людей была такая же проблема: google, я лучше воспользуюсь кастомная реализация, написанная мной. Спасибо, в любом случае. - person Pablo Ariel; 25.08.2018
comment
@PabloAriel Ваш код имеет больше ошибок, чем Visual Studio в сочетании с Android NDK и Clang, полностью вероятно. - person Lightness Races in Orbit; 28.08.2018
comment
Странно ... когда я сообщаю об ошибках в MS, они кажутся счастливыми и получают их для исправления, вместо того, чтобы сообщать мне, что мой код неправильный. Может, тебе стоит сказать им, что они неправы. Кроме того, довольно очевидно, насколько плохо управляются эти проекты, и если вы знаете что-нибудь о статистическом анализе, вы можете легко заметить, что чем больше код, тем больше ошибок. Также, вероятно, любой проект, размер которого превышает 1 миллилитр, плохо управляется, если только это не программа, которая делает буквально все, что вы можете вообразить. - person Pablo Ariel; 28.08.2018
comment
@PabloAriel Тогда ты знаешь лучше. Удачи. - person Lightness Races in Orbit; 28.08.2018
comment
Не нужно везения ... Лучше сделаю ставку на знания и опыт, но все равно спасибо. - person Pablo Ariel; 28.08.2018
comment
@PabloAriel: Отлично! - person Lightness Races in Orbit; 29.08.2018

std::stoi доступен только с C ++ 11. Если у вас нет поддержки C ++ 11, вот решение C ++ 03 на основе _2 _:

std::string test = "45";
std::istringstream is(test);
int myInt;
if (is >> myInt)
    std::cout << myint << std::endl;

тебе просто нужно #include <sstream>

person LihO    schedule 20.10.2013
comment
Также std::strtol(). - person ; 20.10.2013
comment
@ H2CO3: Да, но это в стиле C char*, а это в <cstdlib>. Но хороший момент :) - person LihO; 20.10.2013
comment
У меня есть поддержка C ++ 14, и у меня такая же проблема. - person Pablo Ariel; 22.08.2018

Если вы можете использовать stdlib.h, то другой способ заставить его работать - использовать atoi(const char *)

int myint = atoi(test.c_str());
person Makesh    schedule 21.03.2016