У меня есть #include (string) в моих декларациях в верхней части программы, но когда я пытаюсь запустить stoi (string) или stoll (string), я получаю следующую ошибку. Я использую Cygwin g ++ v4.5.3.
Z: \ G \ CSCE 437> g ++ convert.cpp -o conv
convert.cpp: в функцииvoid transfer(std::string*)':
Столл не был объявлен в этой области
convert.cpp:103:36: error:
convert.cpp: 116: 35: ошибка: `stoi ‘не было объявлено в этой области
fileTime[numRec] = stoll(result[0]); //converts string to Long Long
if(numRec = 0){
beginningTime = fileTime[0];
}
fileTime[numRec] = timeDiff;
hostName[numRec] = result[1];
diskNum[numRec] = stoi(result[2]);
type[numRec] = result[3];
offset[numRec] = stoi(result[4]);
fileSize[numRec] = stoi(result[5]);
responseTime[numRec] = stoi(result[6]);`
Где результат — массив строк.
Эти функции являются новыми в C ++ 11, и GCC делает их доступными, только если вы укажете эту версию языка с помощью параметра командной строки -std=c++11
(или же -std=c++0x
на некоторых старых версиях; Я думаю, что вам нужно это для версии 4.5).
Если по какой-то причине вы не можете использовать C ++ 11, вы можете конвертировать с использованием потоков строк:
#include <sstream>
template <typename T> from_string(std::string const & s) {
std::stringstream ss(s);
T result;
ss >> result; // TODO handle errors
return result;
}
или, если вы чувствуете себя мазохистом, С функционирует следующим образом: strtoll
объявлено в <cstring>
,
Других решений пока нет …