【问题标题】:convert the string from combobox to double将字符串从组合框转换为双精度
【发布时间】:2012-11-22 11:37:34
【问题描述】:

我正在尝试执行以下操作:

CCombobox m_obs;
CString temp;

m_obs.GetWindowTextA(temp);
double newObs = strtod(temp, NULL);

但是,我在strtod() 中收到错误,即不存在从CStringconst char * 的合适转换函数。

如何将字符串从组合框转换为双精度?

【问题讨论】:

  • 这应该可以工作,除非您在项目中启用了 UNICODE,在这种情况下,您需要先将字符串转换为 ANSI
  • @aleguna 听起来像是一个答案。
  • 非常感谢您的回答。我的项目是 UNICODE。我将其更改为未设置和多字节字符集,但随后出现构建错误LNK1561: entry point must be defined
  • @chintans:对于多字节字符集,您必须有一个 wmain 而不是 main

标签: c++ visual-c++ mfc


【解决方案1】:

尝试改为CStringA,强制使用 Ansi 版本,否则 CString 取决于编译器开关,其中 UNICODE 为默认值。

【讨论】:

    【解决方案2】:

    strtod() 期望 const char * str 用于第一个参数。 你应该这样做:

    const char* cstr = (LPCTSTR)temp;
    double newObs = strtod(cstr, NULL);
    

    【讨论】:

    • CString 有一个隐式转换运算符到 LPCTSTR 编译器没有选择它的事实意味着 OP 的项目启用了 UNICODE 并且 LPCTSTR 是一个宽字符字符串。这意味着const char* cstr = (LPCTSTR)temp; 也不起作用
    • 非常感谢您的回答。我的项目是 UNICODE。我将其更改为未设置和多字节字符集,但随后出现构建错误 LNK1561:必须定义入口点。
    【解决方案3】:

    感谢您的回复。

    对于 UNICODE 项目,请执行以下操作:

    double NewObs = wcstod(temp, NULL);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多