【问题标题】:WxWidgets problem - Cannot convert from 'const char [1]' to 'wxString&wWxWidgets 问题 - 无法从 'const char [1]' 转换为 'wxString&w
【发布时间】:2009-08-13 12:41:30
【问题描述】:

环境:Visual Studio 2008,wxWidgets 2.8.10,Vista 64

代码

header.h

#include <wx/wx.h>

class CSend
{
    CSend(wxString& name = "");
    ~CSend();
};

main.cpp

#include "header.h"

void main()
{
   CSend dlg(wxString("Hi"));
}

当我编译这个程序时,我得到以下错误

错误 C2440:“默认参数”:无法从“const char [1]”转换为“wxString &”

谁能帮帮我?

【问题讨论】:

  • 您使用的是哪个 wxWidgets 版本?

标签: c++ visual-studio-2008 wxwidgets


【解决方案1】:

您真的希望更改传递给 CSend 构造函数的 wxString name 的值吗?如果没有,请更改

CSend(wxString& name = "");

CSend(const wxString& name = "");

我不知道 wxString 类,但我猜它有一个来自 char * 的构造函数。它允许您创建一个 wxString 类型的临时变量,用作 CSend 构造函数的默认参数,但它不能绑定到非 const 引用 - 只能绑定到 const。

【讨论】:

    【解决方案2】:

    如果您没有使用 Unicode 构建的 wxWidgets,请更改

    Microsoft Visual Studio 2008->项目->属性->配置属性->常规->字符集

    到“使用多字节字符集”。

    更多细节可以在这里找到...

    http://www.gamedev.net/community/forums/topic.asp?topic_id=403518

    【讨论】:

      【解决方案3】:

      代替这一行:

      class CSend { CSend(wxString& name = ""); ~CSend(); };
      

      试试这个:

      class CSend { CSend(wxString& name = wxString()); ~CSend(); };
      

      【讨论】:

      • 不知道为什么这被否决 - 这是一个合法的解决方案(虽然可能不是最好的)
      【解决方案4】:

      如果你希望它们是可翻译的,你只需要用 _() 引用你的字符串,如果你不这样做,你只需要用 wxT() 引用,我认为这是为了 Unicode 兼容性。在您的情况下,这将是:

      CSend(wxString&amp; name = _(""));

      CSend(wxString&amp; name = wxT(""));

      由于这是一个空字符串,您可能想改为:

      CSend(wxString&amp; name = wxEmptyString);

      【讨论】:

      • 当我编译这段代码时,我得到以下错误,“error C2440: 'default argument' : cannot convert from 'const wxChar *' to 'wxString &'”
      • 你必须做 CSend(const wxString& name = wxEmptyString) 因为 wxEmptyString 是一个 const wxChar*。实际上,在所有这些示例中都需要 const。
      猜你喜欢
      • 2018-11-16
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多