功能stoi没有声明

时间:2014-02-28 02:07:23

标签: c++ string pointers int

我正在尝试使用stoi将字符串转换为整数,但是它表示它没有声明。我有标准库和包含,但仍然说“[错误]'stoi'未在此范围内声明”

代码如下:

#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;

}

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

12 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:16)

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

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

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

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

显示在绿色右边的非常小的写作中需要c ++ 11。

答案 2 :(得分:9)

stoi是一个C ++ 11函数。如果您没有使用了解C ++ 11的编译器,那么这根本就不会编译。

您可以使用stringstream来阅读输入:

stringstream ss(hours0);
ss >> hours;

答案 3 :(得分:8)

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

您可以尝试atoi(hours0.c_str())。

答案 4 :(得分:3)

而不是这一行 -

int hours = stoi(hours0);

写下这个 -

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

#include <algorithm>

包含此内容然后您可以使用...

进行编译

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

您还可以将“cd / d%~dp0”添加为与源文件位于同一目录中的.bat文件的第一行,这样您只需双击.bat文件即可实现“自动化” “汇编。

希望这有帮助!

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

我设法通过在我的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问题。

答案 11 :(得分:0)

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

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

这应该解决错误