.cpp:23:错误:无法将'std :: string'转换为'const char *'以将参数'1'转换为'int atoi(con​​st char *)'

时间:2015-06-22 03:55:32

标签: c++ string

这是我尝试运行的基本代码但是我遇到了stoi问题(它的c ++)我一直收到错误:

‘stoi’ was not declared in this scope

我尝试了atoi和strtol这个错误

.cpp:23: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’

代码:

using namespace std;

int main(){
    string numberGuessed;
    int intNumberGuessed = 0;
    do {
        cout << "Guess a numeber btw 1 - 10: " << endl;
        getline(cin, numberGuessed);
        intNumberGuessed = atoi(numberGuessed);
        cout << intNumberGuessed << endl;
    } while(intNumberGuessed != 4);
    cout<< "you win" << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:7)

atoi()函数接受const char*参数,但您尝试将其传递给std::string。把它写成intNumberGuessed = atoi(numberGuessed.c_str());来取指针。

至于第一个错误,关于stoi()未声明 - 这是因为该函数是在C ++ 11标准中添加的,因此您必须在编译器中启用它的支持。即在较旧版本的GCC中,您可以使用-std=c++11选项(默认情况下启用since gcc5 C11 is,并且默认情况下为gcc6 C++11 will be enabled

答案 1 :(得分:3)

使用stoi,它是C&#39 {s} atoi的现代C ++版本。

<强>更新

由于问题上方的原始答案文本已修改,并显示以下错误消息:

‘stoi’ was not declared in this scope

假设这个错误是由g ++(使用该措辞)产生的,这可能有两个不同的原因:

  • 使用不符合{+ 1}}提供的g +的不符合变体。

  • 在C ++ 03模式下使用g ++(在{+ C> 11中引入了std::stoi)。

对于Windows,已知MinGW-w64变体提供stoi,特别是Nuwen分发基于MinGW-w64。

对于C ++ 11模式,使用g ++选项std::stoi。例如,对于Nuwen distribution g ++ version 5.1,这是必要的。