【问题标题】:'<function-style-cast>' : cannot convert from 'int' to 'CString''<function-style-cast>' : 无法从 'int' 转换为 'CString'
【发布时间】:2011-04-22 21:18:00
【问题描述】:

这段代码是用 Visual Studio 2003 编写的,但现在我是在 2008 年编译的。

int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);

if(iiRecd == SOCKET_ERROR || iiRecd == 0) {
  iErr = ::GetLastError();
  AfxMessageBox(CString(iErr));
  goto PreReturnCleanup;
}

在 2003 年,它工作正常,但在 2008 年,它显示错误:

错误 50 错误 C2440: '' : 无法从 'int' 转换为 'CString'

这个错误是什么意思?

【问题讨论】:

  • 你能告诉我们错误所在的代码行吗?
  • 正如 Armen Tisrunyan 所观察到的,在没有看到有问题的代码的情况下,不能再说出错误消息已经说明的内容。
  • 对于那些认为错误出现在 mysocket.cpp 的第 4539 行相关的人,我总是感到惊讶。如果它在第 3 行,我们会给出相同的答案,真的。或者如果源文件存储在 C:\ 驱动器上。

标签: c++ casting


【解决方案1】:

如果没有任何信息,例如错误的代码以及您想在那里做什么,这有点难以提供帮助。

这是一个猜测: 您想将int 转换为CString,如下所示:

int i = 42;
CString str = (CString)i;

如果您使用的是MFC/ATL CString,您可以尝试以下方法

int i = 42;
CString str;
str.Format("%d", i);

CString::Format 采用类似printf 的格式字符串并将结果存储在 CString 中。

编辑

我将您在下面的评论解释为导致错误的代码。不过,有一点周围的文字和解释会很好。

if(iiRecd == SOCKET_ERROR || iiRecd == 0) { 
  iErr = ::GetLastError();
  AfxMessageBox(CString(iErr));
  goto PreReturnCleanup; 
}

试着改成

if(iiRecd == SOCKET_ERROR || iiRecd == 0) { 
  iErr = ::GetLastError();
  CString msg;
  msg.Format("%d", iErr);
  AfxMessageBox(msg);
  goto PreReturnCleanup; 
}

goto PreReturnCleanup; 的一般评论:您可能想看看RAII-Idiom 作为(恕我直言)更好的清理方法。

【讨论】:

  • 检查这行代码......实际上这些代码是用 Visual Studio 2003 编写的,现在我在 2008 年编译它......在 2003 年它工作正常,但在 2008 年它向我显示错误 int AFXAPI AfxMessageBox(LPCTSTR lpszText,UINT nType = MB_OK,UINT nIDHelp = 0); if(iiRecd == SOCKET_ERROR || iiRecd == 0) { iErr = ::GetLastError(); AfxMessageBox(CString(iErr));转到 PreReturnCleanup; }
  • int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);
  • @tirupati:请将您的代码添加到原始问题中。并确保它已格式化(有一个 110110 按钮来格式化所选文本)
【解决方案2】:

这显然是因为您使用了 int 类型的表达式,而预期 CString 类型的表达式。没有更多的代码就不能说更多了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多