C++已声明为public的成员变量在Visual Studio中提示无法访问错误
问题解决指南
最常见诱因
你遇到的public成员提示不可访问、同时乱抛protected权限错误的问题,基本都是访问代码所在的cpp文件没有完整引入CKaltestDlg的类定义导致的:
如果你的cpp文件里只写了class CKaltestDlg;这类前置声明,没有加#include "KaltestDlg.h",编译器看不到类的内部成员声明,会默认判定所有成员不可访问,就会出现你遇到的权限报错。
- 修复步骤:
- 打开访问
dlg.m_ReminderInputFocus代码所在的cpp文件 - 检查顶部引入的头文件中是否有
#include "KaltestDlg.h" - 没有就补上,已经有的话检查头文件路径配置是否正确,有没有引入到其他同名头文件
- 打开访问
次要排查点
如果确认头文件引入正确,可调整类声明中DECLARE_MESSAGE_MAP宏的位置:MFC要求DECLARE_MESSAGE_MAP要放在类声明的最后一行,避免宏展开的隐藏内容打断成员权限作用域,调整后的类末尾代码参考如下:
// KaltestDlg.h 类末尾调整示例 public: afx_msg void OnBnClickedRemindersinputfocus(); CButton m_EnableDisableInputFocus; BOOL m_ReminderInputFocus; CButton m_EnableDisableRemindersOntop; BOOL m_RemindersOnTop; afx_msg void OnBnClickedRemindersalwaysontop(); CButton m_EnableDisableFlash; BOOL m_FlashTaskbarButton; afx_msg void OnBnClickedReminderflash(); DECLARE_MESSAGE_MAP(); // 挪到类声明的最后位置 };
极端情况排查
如果上述操作都无效,检查是否有以下问题:
- 成员名拼写错误,确认
m_ReminderInputFocus的拼写、大小写和头文件声明完全一致 - 项目缓存异常,清理解决方案的临时编译文件后重新生成
内容的提问来源于stack exchange,提问作者lorasaur
相关产品推荐
相关产品推荐

