此代码是用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:'< function-style-cast>' :无法从'int'转换为'CString'
这个错误是什么意思?
答案 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
的表达式。如果没有进一步的代码,就不能再说了。