【问题标题】:‘stoi’ was not declared in this scope [duplicate]'stoi' 未在此范围内声明 [重复]
【发布时间】:2016-01-03 19:41:35
【问题描述】:

因此,此错误已多次解决,但没有任何答案对我有帮助。我在 Windows 10 上使用 Notepad++ 和 Cygwin。我的代码如下,来自Derek Banas's 1 hour C++ tutorial:

#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 已经有using namespace std;
  • @oLen $ g++ -std=c++11 -static ctut.cpp ctut.cpp: In function ‘int main()’: ctut.cpp:15:25: error: ‘stoi’ is not a member of ‘std’ intNumberGuessed = std::stoi(numberGuessed);
  • 所以你在编译时设置了-std=c++11选项?
  • @πάνταῥεῖ 是的 $ g++ -std=c++11 -static ctut.cpp 我已经尝试过使用或不使用这些选项。

标签: c++ c++11 gcc g++ cygwin


【解决方案1】:

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

【讨论】:

  • 哦,非常感谢它成功了!
  • 但是不要。​​​atoi被取代是有充分理由的。
  • @LightnessRacesinOrbit 哦,真的吗? strtol 那么呢?
  • @Mohsen:理想情况下,您应该从源头解决问题并使用stoi。但是strtol 同时是一个可行的解决方法,是的。
  • atoi 有安全问题对吗?实际上有很多方法可以将字符串转换为 int。例如。使用 stringstream 或 boost::lexical_cast 等。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多