'<function-style-cast>':无法从'int'转换为'CString'</function-style-cast>

时间:2010-10-08 13:02:46

标签: c++ casting

此代码是用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:'&lt; function-style-cast&gt;' :无法从'int'转换为'CString'

这个错误是什么意思?

2 个答案:

答案 0 :(得分:3)

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

这是一个猜测: 您想将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 - 成语看作(imho)更好的方法来进行此类清理。

答案 1 :(得分:1)

这显然是因为您使用了int类型的表达式,其中需要类型为CString的表达式。如果没有进一步的代码,就不能再说了。