Я пытаюсь преобразовать символ из строки ac в 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);
Если std::stoi
отсутствует, попробуйте #include <string>
(и включите С++ 11). Однако смотрите также эту тему - порты для Windows из g++ имели давнюю проблему с поддержкой 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
если третий символ в строке был цифрой.
Символ неявный преобразует в int, вам не нужно использовать дополнительные функции.
'a' = 97, 'b' = 98, 'c' = 99 и т.д., следуя таблице ASCII
Поэтому, если вы пишете,
char a_char = 'a';
int a_val = a_char;
cout << a_val << endl;
у тебя есть:
97
std :: stoi() - это С++ 11. Не все компиляторы по умолчанию используют С++ 11.
Первая ошибка связана с тем, что вы не включили поддержку С++ 11. GCC в настоящее время выбирает С++ 03 по умолчанию, а stoi
не существует в этой версии.
Добавьте -std=c++11
в аргументы компилятора. Если это не сработает, попробуйте -std=c++0x
и подумайте о том, чтобы получить более современный компилятор. Если вы застряли в древнем компиляторе, используйте atoi
как в коде, который вы изначально разместили (или, возможно, что-то, что связано с strtol
, если вы хотите обнаружить ошибки).
Также убедитесь, что вы указали <string>
для объявления этой функции.
Вторая ошибка связана с тем, что вы написали :
вместо ::
.
-std=c++11
к аргументам компилятора. В вашем случае добавьте его в определение CXXFLAGS
в make- CXXFLAGS
.
line[2]
кодаline[2]
вline.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(2ul)
сообщенияline.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(2ul)
безумен.