如何将字符串从双精度转换为双精度*

安德鲁

我正在学习C ++,所以这可能是一个基本问题,但是,这是一个现实生活中的问题。我需要以最优雅/现代的方式(> C ++ 98)从字符串转换为双精度,然后再转换为双精度*。

该结构由基于C的框架提供(我在这里简化了代码,因为这仅是问题的症结),并且由于它与封闭源Metatrader4交易应用程序(非基于C)交互,因此我无法更改框架。编程接口要求将指针传递给结构。

正在从包含我从Metatrader4应用程序中获取的转储的csv文件中读取字符串。其细节超出了此问题。但是,输入仍然是字符串,因此是原始类型。

我很欣赏框架中使用的方法可能很老套,但这是生活的一部分。这并不意味着我不能渴望在代码中做得更好,因此我之所以要求优雅/现代的解决方案。如果它们不存在,那么我将被迫使用new,因为有人已经建议过。

我目前有以下无效代码:

#include <string>

struct bidAsk
{
    double *bid;
    double *ask;
};

int main()
{
    bidAsk ba;
    ba.bid = std::stod("1.100");
    ba.ask = &std::stod("1.102");
}

但是,上述两种转换方法均会因转换错误而失败。

第一行导致错误,该错误指出:

E0513   a value of type "double" cannot be assigned to an entity of type "double *"

第二行导致以下错误:

E0158   expression must be an lvalue or a function designator

我也尝试过static_cast,const_cast,make_unique和(double *)强制转换。

提前致谢。

加利克

问题是您需要一些实际值来指向指针他们不能仅仅指向从数字转换函数返回的临时值

struct bidAsk
{
    double* bid;
    double* ask;
};

int main()
{
    bidAsk ba;

    // these have to exist somewhere that lives as long as the
    // bidAsk object that points to them.
    double bid_value = std::stod("1.100");
    double ask_value = std::stod("1.102");

    ba.bid = &bid_value; // just pointing to the real values above
    ba.ask = &ask_value;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章