“stoi”在此范围内未声明。

4

这个错误已经被多次解决,但是没有一个答案能够帮助我。我正在使用Windows 10上的Notepad++和Cygwin。我的代码如下,来自Derek Banas的1小时C++教程

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cstdlib>
#include <sstream> 
//#include <stdlib.h>
using namespace std;
int main(){
    string numberGuessed;
int intNumberGuessed = 0;
 do {
    cout << "Guess between 1 and 10: ";
     getline (cin,numberGuessed);
     intNumberGuessed = stoi(numberGuessed);
    cout << intNumberGuessed << endl;
 } while (intNumberGuessed != 4);
   cout << "You Win" << endl;
    return 0;
}

这是我得到的错误信息:

$ g++ -std=c++11 -static ctut.cpp
ctut.cpp: In function ‘int main()’:
ctut.cpp:15:43: error: ‘stoi’ was not declared in this scope
      intNumberGuessed = stoi(numberGuessed);

你看,我已经应用了之前回答线程中的所有建议。我是否漏掉了什么?我需要开始使用Ming吗?因为在这里另一个主题中,Notepadd++是我发现得票最高的。这就是我找到并尝试过但没有成功的内容:Function stoi not declared


如果您将 stoi 替换为 std::stoi 会怎样呢? - oLen
@oLen 已经有 using namespace std; 了吗? - πάντα ῥεῖ
@oLen $ g++ -std=c++11 -static ctut.cpp ctut.cpp: 在函数 ‘int main()’ 中: ctut.cpp:15:25: 错误: ‘stoi’ 不是 ‘std’ 的成员 intNumberGuessed = std::stoi(numberGuessed); - Mohsen
所以你在编译时设置了“-std=c++11”选项? - πάντα ῥεῖ
@Fireho 是的,strtol 的工作方式就像那里提到的那样。感谢您提供的链接。虽然我不理解变量0和10,但是答案中提到的atoi运行良好。根据您提供的链接,我现在明白了为什么会出现这个错误。谢谢。 - Mohsen
显示剩余9条评论
1个回答

2

我现在还不能发表评论 :( 但是你可以使用atoi(numberGuessed.c_str())代替stoi()


1
哦,非常感谢,它起作用了! - Mohsen
但是 不要 这样做。有很好的理由替换 atoi 函数。 - Lightness Races in Orbit
哦,是吗?那么用 strtol 函数吗? - Mohsen
1
@Mohsen:理想情况下,您应该在源代码中修复问题并使用stoi。但是,在此期间,strtol是可行的解决方法。 - Lightness Races in Orbit
atoi有安全问题,对吧?实际上,有很多方法可以将字符串转换为整数。例如使用stringstream或boost::lexical_cast等。 - Dimitri Podborski
@incBrain 我会试一试的,谢谢。 - Mohsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接