我正在尝试使用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;
}
要么告诉我它为什么不起作用,或者请给我第二个选择,请。
答案 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 ++进行编程项目时遇到了这个错误,
这应该解决错误