我试图将字符从c字符串转换为int但我一直遇到错误。
这是我的代码
while(std::getline(file, line)){
if(std::isdigit(line[0]) && std::isspace(line[1]) && std::isdigit(line[2])){
SequenceArray.push_back(line);
if(std::stoi(line[2])== (SequenceArray.size() -1)){
std::cout<< "Success" << std::endl;
我一直得到的错误如下:
a1.cpp: In function ‘int main(int, char**)’:
a1.cpp:30:25: error: call of overloaded ‘stoi(char&)’ is ambiguous
if(std::stoi(line[2])== (SequenceArray.size() -1)){
^
a1.cpp:30:25: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
from /usr/include/c++/4.8/bits/locale_classes.h:40,
from /usr/include/c++/4.8/bits/ios_base.h:41,
from /usr/include/c++/4.8/ios:42,
from /usr/include/c++/4.8/ostream:38,
from /usr/include/c++/4.8/iostream:39,
from a1.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2823:3: note: int std::stoi(const string&, std::size_t*, int) <near match>
stoi(const string& __str, size_t* __idx = 0, int __base = 10)
^
/usr/include/c++/4.8/bits/basic_string.h:2823:3: note: no known conversion for argument 1 from ‘char’ to ‘const string& {aka const std::basic_string<char>&}’
/usr/include/c++/4.8/bits/basic_string.h:2926:3: note: int std::stoi(const wstring&, std::size_t*, int) <near match>
stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
^
/usr/include/c++/4.8/bits/basic_string.h:2926:3: note: no known conversion for argument 1 from ‘char’ to ‘const wstring& {aka const std::basic_string<wchar_t>&}’
a1.cpp:35:6: warning: label ‘std’ defined but not used [-Wunused-label]
std:exit(EXIT_FAILURE);
答案 0 :(得分:3)
char 隐式转换为 int ,您不需要使用额外的功能。
&#39;一个&#39; = 97,&#39; b&#39;在ASCII表
之后,= 98,&#39; c&#39; = 99等所以,如果你写,
char a_char = 'a';
int a_val = a_char;
cout << a_val << endl;
你有:
97
答案 1 :(得分:1)
如果std::stoi
丢失,请尝试#include <string>
(并启用C ++ 11)。但是另请参阅this thread - g ++的Windows端口在支持stoi
和to_string
时遇到了长期存在的问题。
第二个错误是std:exit
应为std::exit
。
第三个错误是因为line[2].c_str()
。您尚未告诉我们line
是什么,但错误消息表明它是std::string
。因此line[2]
是char
而char
没有任何成员函数。如果您在代码std::atoi(line[2].c_str())
中解释您要执行的操作,则有人可以提供帮助。也许你的意思是line[2] - '0'
,如果该行中的第三个字符是数字,它将在0
和9
之间给出一个整数。
答案 2 :(得分:0)
第一个错误是因为您尚未启用C ++ 11支持。 GCC目前默认选择C ++ 03,并且stoi
在该版本中不存在。
将-std=c++11
添加到编译器的参数中。如果这不起作用,请尝试-std=c++0x
,并考虑获取更新的编译器。如果您坚持使用古老的编译器,那么请使用atoi
,就像您最初发布的代码一样(或者如果您想检测错误,可能会涉及strtol
)。
另外,请确保您已包含<string>
声明该功能。
第二个错误是因为您写了:
而不是::
。
答案 3 :(得分:0)
std :: stoi()是C ++ 11。并非所有编译器都默认启用C ++ 11。