我正在学习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] 删除。
我来说两句