You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2015编写MFC程序时NM_DBLCLK消息提示异常但编译成功求助

解决VS2015 MFC中NM_DBLCLK消息智能提示报错但编译成功的问题

嘿,我一眼就揪出你代码里的小疏漏啦!

你看报错的那行代码:

ON_NOTIFY_REFLECT(NM_DBLCLK, &CMainView:OnNMDblclk) //error code

这里犯了个很容易忽略的语法错误——在C++里访问类成员函数的地址时,必须用**双冒号::**作为作用域解析符,你这里只写了一个冒号:,这就是VS智能提示弹出“数字预期结束后存在多余文本”的根源。

那为啥程序还能编译成功呢?其实是编译器的“容错机制”在帮你兜底:因为你的CMainView类里只有一个叫OnNMDblclk的成员函数,编译器处理时自动忽略了这个单冒号的笔误,成功定位到了对应的函数地址,所以编译顺利通过了。但这只是巧合,要是后续项目里出现同名全局函数,或者代码结构变复杂,这个小错误肯定会引发编译失败甚至逻辑bug。

修正后的代码应该是这样的:

BEGIN_MESSAGE_MAP(CMainView, CListView)
    ON_COMMAND(ID_EDIT_ADD, &CMainView::OnEditAdd)
    ON_COMMAND(ID_EDIT_DEL, &CMainView::OnEditDel)
    ON_COMMAND(ID_EDIT_MOD, &CMainView::OnEditMod)
    ON_NOTIFY_REFLECT(NM_DBLCLK, &CMainView::OnNMDblclk) // 修正为双冒号
END_MESSAGE_MAP()

把单冒号改成双冒号后,VS的智能提示报错就会消失,代码也更规范,能避免后续踩不必要的坑。

内容的提问来源于stack exchange,提问作者Yang.Jerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:37:52