【问题标题】:Function stoi not declared函数 stoi 未声明
【发布时间】:2014-03-31 20:13:21
【问题描述】:

我正在尝试使用stoi 将字符串转换为整数,但是它说它没有被声明。我有标准库和<string>,但它仍然显示[Error] 'stoi' was not declared in this scope

代码如下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;

int main()
{
string end, init;
cout << "Introduction" << endl;
cout << "Start time (xx:yy)" << endl;
cin >> init;
string hours0 = init.substr(0,2);
int hours = stoi(hours0);
cout << hours << endl;
system("pause");
return 0;

}

请告诉我为什么它不起作用,或者给我第二个选择。

【问题讨论】:

标签: c++ string pointers int


【解决方案1】:

std::stoi 是在 C++11 中引入的。确保您的编译器设置正确和/或您的编译器支持 C++11。

【讨论】:

  • DevC++ 是 IDE 而不是编译器。仔细检查随您的 Dev C++ 副本提供的编译器版本,并在必要时升级或添加所需的命令行开关以启用它。
  • 由于 Visual Studio C++ Express 仅付费,我最好的选择是什么? QT Creator 适合 C++ 程序员吗?
  • @user3258512,Express 是免费的。
  • @chris 我发现 Express 太复杂了,我不能像在 Dev C++ 中那样编写代码和编译/调试。有什么建议吗?
  • @user3258512:如果你仍然执着于使用 Dev-C++,有一个名为 Orwell 的更新分支,它似乎支持 C++11:sourceforge.net/projects/orwelldevcpp/files/Setup %20 发布/
【解决方案2】:

上面的答案是正确的,但没有得到很好的解释。

g++ -std=c++11 my_cpp_code.cpp

将 -std=c++11 添加到您的编译器选项中,因为您很可能使用的是较旧版本的 debian 或 ubuntu,默认情况下未使用新的 c++11 标准 g++/gcc。我在 Debian Wheezy 上遇到了同样的问题。

http://en.cppreference.com/w/cpp/string/basic_string/stol

在右侧以非常小的绿色文字显示需要 c++11。

【讨论】:

    【解决方案3】:

    stoi 是一个 C++11 函数。如果你没有使用理解 C++11 的编译器,这根本就无法编译。

    您可以改用stringstream 来读取输入:

    stringstream ss(hours0);
    ss >> hours;
    

    【讨论】:

      【解决方案4】:

      stoi “自 C++11 起”可用。确保您的编译器是最新的。

      你可以试试 atoi(hours0.c_str())。

      【讨论】:

        【解决方案5】:

        而不是这一行 -

        int hours = stoi(hours0);

        写这个 -

        int hours = atoi(hours0.c_str());

        参考: int atoi(const char *str)

        【讨论】:

          【解决方案6】:

          在另一个答案下的 cmets 中,您表示您在 MS Windows 下使用的是 g++ 的狡猾版本。

          在这种情况下,最佳答案所建议的-std=c++11 仍然无法解决问题。

          请参阅以下讨论您的情况的帖子:std::stoi doesn't exist in g++ 4.6.1 on MinGW

          【讨论】:

            【解决方案7】:

            我在使用 c++ 进行编程项目时遇到了这个错误,

            1. atoi(),stoi() 不是 g++ 中旧 c++ 库的一部分,因此在编译时使用以下选项 g++ -std=c++11 -o my_app_code my_app_code.cpp
            2. 在您的代码中包含以下文件#include

            这应该会处理错误

            【讨论】:

              【解决方案8】:

              您正在运行 C++ 11 吗? stoi 是在 C++ 11 中添加的,如果您在旧版本上运行,请使用 atoi()

              【讨论】:

                【解决方案9】:

                安装最新版本的 TDM-GCC 这是链接-http://wiki.codeblocks.org/index.php/MinGW_installation

                【讨论】:

                  【解决方案10】:
                  #include <algorithm>
                  

                  包含这个,然后你可以使用...编译它

                  g++ -Wall -std=c++11 test.cpp -o test

                  您还可以将“cd /d %~dp0”作为 .bat 文件的第一行添加到与源文件相同的目录中,因此您只需双击 .bat 文件即可获得“自动" 编译。

                  希望这会有所帮助!

                  【讨论】:

                    【解决方案11】:

                    在编译代码时添加此选项:-std=c++11

                    g++ -std=c++11 my_cpp_code.cpp
                    

                    【讨论】:

                      【解决方案12】:

                      我设法通过在我的CMakeLists.txt 中添加以下行来解决这个问题:

                      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
                      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")
                      
                      # Check C++11 or C++0x support
                      include(CheckCXXCompilerFlag)
                      CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
                      CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
                      if(COMPILER_SUPPORTS_CXX11)
                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
                         add_definitions(-DCOMPILEDWITHC11)
                         message(STATUS "Using flag -std=c++11.")
                      elseif(COMPILER_SUPPORTS_CXX0X)
                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
                         add_definitions(-DCOMPILEDWITHC0X)
                         message(STATUS "Using flag -std=c++0x.")
                      else()
                         message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
                      endif()
                      

                      正如其他人所说,这是-std=c++11问题。

                      【讨论】:

                        【解决方案13】:

                        调用函数时需要添加std:::

                        int hours = std::stoi(hours0);
                        

                        【讨论】:

                          猜你喜欢
                          • 2015-08-20
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-10-27
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2021-05-12
                          相关资源
                          最近更新 更多