在C ++中将双精度转换为char * / string

时间:2014-03-04 09:22:45

标签: c++ string pointers double

我很确定这不是一项艰巨的任务,但我没有得到导致问题的原因,我想真正理解这一点,因为我经常有一些指针/数组/与演员相关的问题:

我将边界框值存储在double *

// this is the calss-variable
double *_boundingBox;

// this is where I put some data in it
double boundingBox[6];
boundingBox[0] = 
.
.
.
boundingBox[6] = ....; 

// set pointer to boundingbox
_boundingBox = &boundingBox;

在另一个班级我用这个

double* getBoundingBoxInfo()
{
    return _boundingBox;
}

获取我的边界框数据,我想在QLabel中输入为QString

double boundingBox[6];
boundingBox[0] = *_drawer->getBoundingBoxInfo();

std::string stringX = "x start: " <<  boundingBox[0] << "\tx end: " <<   boundingBox[3];
QLabel *labelX = new QLabel(QString(stringX.c_str()));

当前的编译错误是

  

错误:类型'const char [10]'的无效操作数和'double'到二进制'运算符&lt;&lt;'

有人可以告诉我这应该如何运作?我是否使用double *,double []和字符串应该使用它们的方式?

3 个答案:

答案 0 :(得分:4)

您无法按原样将数据流式传输到std::string。解决方案是使用std::ostringstream

std::ostringstream out;
out << "x start: " <<  boundingBox[0] << "\tx end: " <<   boundingBox[3];
std::string stringX = out.str();

答案 1 :(得分:0)

您获得的编译错误是"x start: " << boundingBox[0]

"x start: "的类型为const char*boundingBox[0]的类型为double

operator<<(const char*,double)没有定义。

您可以使用ostringstream对象来实现此目的:

ostringstream oss;
oss << "x start: " << boundingBox[0] << "\tx end: " << boundingBox[3];
std::string stringX = oss.str();

作为旁注,当您设置_boundingBox = &boundingBox时,您不需要&,因为boundingBox是一个数组,所以实质上是boundingBox == &boundingBox

原因(如果你想知道)是数组没有l值,你不能改变数组的值(例如,你不能boundingBox = ...)。 / p>

答案 2 :(得分:0)

QString提供所有http://qt-project.org/doc/qt-4.8/qstring.html#arg-20

所以只需使用

QString("some text for double value: %1").arg(yourdouble, <additional parameters>)

,在你的情况下:

... new QLabel(QString("x start: %1\tx end: %2").arg(boundingBox[0]).arg(boundingBox[3]));