错误 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 错误

如何使用 MFC 工具提示的示例代码修复错误?

VC++ 2010:从 VC6++ 转换后显示打开对话框出错

重载输出运算符时出现错误 c2440 错误