这里有一点问题:
int IntegerTransformer::transformFrom(std::string string){
stream->clear();
std::cout<<string<<std::endl;;
(*stream)<<string;
int i;
(*stream)>>i;
std::cout<<i<<std::endl;
return i;
}
我通过使用字符串“67”调用此函数(其他值也不起作用)我得到此输出:
67
6767
答案 0 :(得分:2)
答案 1 :(得分:0)
&于流GT;清除();
不“清空”字符串流的内容。它会重置从流中读取失败时设置的错误标志(例如,因为文本的格式不正确,无法读取整数)。
解决这个问题的最简单方法是创建一个新的本地范围的字符串流:
int IntegerTransformer::transformFrom(std::string string){
std::stringstream parser(string);
int i;
parser>>i;
return i;
}
注意你也不再需要乱用指针(我假设,动态分配),你可以使用构造函数来设置初始值。
将流作为类的数据成员通常是一个坏主意。它们真的不适合这种用途。
下一个最简单的解决方案是使用实际用于作业的成员函数.str()
,如Nawaz所示。
正如Nawaz所提到的,无论如何,废弃整个事情而只是使用boost::lexical_cast
可能是一个更好的主意。不要重新发明轮子。