2012-07-22 44 views
1

所以,基本上这就是我的代码中发生问题的地方。在字符串末尾添加一个double(C++)

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 
#include <cstring> 

void main() 
{ 
    double k = 10.0; 
    string out; 
    out = "V"; 
    out += "."; 
    out << k; <--- 
} 

我尝试编译,但我得到这个错误:

错误C2784:“的std :: basic_ostream < _Elem,_Traits> &的std ::操作< <(STD :: basic_ostream < _Elem, _Traits> & &,_Ty): '从 '的std :: string'

”不能推断出模板参数为' 的std :: basic_ostream < _Elem,_Traits> & & ......那是指着带有箭头的那条线。我究竟做错了什么?

+0

'的std :: to_string'可以帮助你。此外,http://stroustrup.com/bs_faq2.html#void-main – chris 2012-07-22 02:22:35

回答

1

尝试以下操作: -

std::ostringstream strs; 
strs << dbl; 
std::string str = strs.str(); 
1

您要使用的string代替stringstream。没有定义运算符<<,它将以string作为其第一个参数,这是编译器试图告诉您的内容(以相当神秘的方式)。

stringstream out; 
out << "V." << k; 
string s = out.str(); 

如果你在C++ 11,你可以这样写:

double k = 10.0; 
string out; 
out = "V"; 
out += "."; 
out += to_string(k); 
+0

所以我应该使用什么运营商,而不是<<(我宁愿也不使用stringstream) – ked 2012-07-22 02:22:48

+0

@ked为什么不使用'stringstream'?它只是一个'string'对象的包装。 – Potatoswatter 2012-07-22 02:23:29

+1

@ked如果你使用C++ 11,你可以使用'out + = to_string(k)'。在C++ 11之前,'stringstream'是你最好的选择。 – dasblinkenlight 2012-07-22 02:25:21

2

使用std::stringstreamboost::lexical_cast

out += boost::lexical_cast<std::string>(k); 

std::to_string如果你能使用C++ 11

+0

嗯,这似乎是我的情况最有用的一个......谢谢!虽然我对助推库感到陌生。 – ked 2012-07-22 02:24:48

相关问题