我有一个程序,我尝试从向量中提取字符串值并将其转换为浮点型。根据我解析输入数据的方式,确保该字符串是一个数值。尝试运行程序时,出现以下错误。
libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stof: no conversion
Abort trap: 6
我跟踪了问题的出处,也正是我在调用stof()
的过程中将向量中的值转换为浮点数。当我也对值调用stoi()
时,该问题仍然存在。我使用了typeid调用来验证值,并将类型转储到控制台。
type of there_list[2]: NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
val of there_list[2]: 10
我绝对不知道为什么会这样,或者什至是什么情况,因为我的向量显然是字符串的向量。
有问题的代码如下:
string there(buffer);
vector<string> there_list = parse_word_list(there);
// Decide where to send the message next
// if the intended recipient (who the message is addressed to) is in range, send directly to recipient
cout << "type of there_list[2]: " << typeid(there_list[2]).name() << endl;
cout << "val of there_list[2]: " << there_list[2] << endl;
float dist_to_recipient = distance(sensor.getX(), sensor.getY(), stof(there_list[2]), stof(there_list[3]));
其中buffer
是一个char[]
,用于从服务器读取输入数据。我的parse_word_list(there)
调用返回there
中包含的“单词”的字符串矢量,以空格分隔。
该功能是基本功能,看起来像这样
vector<string> parse_word_list(string phrase){
istringstream parse(phrase);
vector<string> word_list;
// Traverse through all words
do {
// Read a word
string word;
parse >> word;
// Append the read word to the word_list
word_list.push_back(word);
} while(parse); // While there is more to read
return word_list;
}