错误 C2440: 'static_cast' : 无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__this
Posted
技术标签:
【中文标题】错误 C2440: \'static_cast\' : 无法从 \'UINT (__thiscall CImportProjectDlg::* )(CPoint)\' 转换为 \'LRESULT (__thiscall CWnd::* )(CPoint)\'【英文标题】:error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'错误 C2440: 'static_cast' : 无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__thiscall CWnd::* )(CPoint)' 【发布时间】:2017-02-24 15:31:59 【问题描述】:我正在将 VC++6.0 项目转换为 Visual Studio 2008(到 2014 年)。我遇到了上述错误。
这是我的代码 sn-p:
BEGIN_MESSAGE_MAP(CImportProjectDlg, CDialog)
//AFX_MSG_MAP(CImportProjectDlg)
ON_WM_SIZE()
ON_WM_GETMINMAXINFO()
ON_WM_SIZING()
ON_WM_PAINT()
ON_WM_NCHITTEST()
ON_BN_CLICKED(IDC_MERGE_IN, OnAdd)
ON_BN_CLICKED(IDC_MERGE_OUT, OnRemove)
ON_BN_CLICKED(IDC_IMPORTPROJECT_CLEARALL, OnClearAll)
ON_BN_CLICKED(IDC_IMPORTPROJECT_APPLY, OnApply)
ON_BN_CLICKED(IDCANCEL,OnCancel)
//AFX_MSG_MAP
END_MESSAGE_MAP()
并且错误显示在 ON_WM_NCHITTEST() 行。
非常令人费解。
【问题讨论】:
【参考方案1】:OnNcHitTest
处理程序的正确签名是afx_msg LRESULT OnNcHitTest(CPoint);
。你让它返回UINT
而不是LRESULT
。
【讨论】:
我不清楚如何以及在何处将 UINT 更改为 LRESULT。CImportProjectDlg
有一个名为 OnNcHitTest
的方法。此方法当前定义为返回UINT
。将其更改为返回LRESULT
。
我觉得有点超出我的深度......我是否将声明:UINT CImportProjectDlg::OnNcHitTest(CPoint point) 更改为 LRESULT。还是我将返回码更改为 LRESULT?
您将返回类型从UINT
更改为LRESULT
,因此声明变为LRESULT CImportProjectDlg::OnNcHitTest(CPoint point)
该函数可能在 .h 文件中声明,并在 .cpp 文件中定义。您已在一处更新,但未在另一处更新。更新两者。【参考方案2】:
如果你需要让源代码在VC6和vs2008上都编译(很遗憾),你可以使用_MSC_VER
来处理。
完整列表here
#if _MSC_VER >= 1500 // For vs2008+
LRESULT
#else
UINT
#endif
CImportProjectDlg::OnNcHitTest(CPoint point)
【讨论】:
以上是关于错误 C2440: 'static_cast' : 无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__this的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )
VS 2010 中的 C++ 中的 static_cast 无法从 void* 转换为 size_t 错误