Возможно, вы забыли включить строку.
Кроме того, имейте в виду, что стои может бросить, так что вы хотите, чтобы инкапсулировать его использование в Try/поймать блок, например, так:
using namespace std;
try
{
string stringy= "25";
int x= stoi(string);
cout<<"y is: "<<y<<endl;
}
catch(invalid_argument& e)
{
cout<<"you entered something that does NOT evaluate to an int"<<endl;
}
Попробуйте это, если вы предоставляете стои скажем, «x25», он бросит, если не пройдет. Если вы не используете этот синтаксис try/catch, программа вырвет момент stoi throws.
Кроме того, кажется, что stoi достаточно умен, чтобы остановить синтаксический анализ, если он обнаруживает то, что не оценивает, поэтому «25x» будет работать нормально, он просто опустит x. Но «x25» бросит.
Хотя обработка исключений не была непосредственно частью вашего вопроса, мне показалось разумным упомянуть.
Попробуйте добавить точку с запятой в конце инструкции 'cin'. –
Я сделал это, и теперь он говорит, что «stoi» не является членом «std». – Neil
Тогда вам нужно будет указать и обязательно скажите компилятору использовать C++ 11 (я считаю, что все версии gcc до 5.0 этого требуют). –