繁体   English   中英

c ++公共成员变量不可访问

[英]c++ Public member variable is inaccessible

当我尝试访问成员变量的值时,Visual Studio 中出现错误消息“成员...无法访问”。
但是,成员变量被声明为 public。 它是派生类,但不是基类的成员变量。
从编译器中,有一条错误消息“无法访问受保护的成员”。
导致错误的行:

    CKaltestDlg dlg;
        fprintf(debugout, "Reminders get input focus %s \n", dlg.m_ReminderInputFocus ? "true" : "false");

头文件。 有问题的成员变量接近尾声,在 public: 标题下。

// KaltestDlg.h : header file
//


#pragma once

// CKaltestDlg dialog
class CKaltestDlg : public CDialogEx
{
// Construction
public:
    CKaltestDlg(CWnd* pParent = nullptr);   // standard constructor

// Dialog Data
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_KALTEST_DIALOG };
#endif

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
public:
    DECLARE_MESSAGE_MAP()
    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()宏的文档

笔记

如果在DECLARE_MESSAGE_MAP之后声明任何成员,则必须为它们指定新的访问类型( publicprivateprotected )。

所以宏扩展可能会导致可见性改变。 要么将宏移到类的末尾,要么在它后面添加public: 如果您将来修改该类,我建议您在代码中对此进行评论,以提醒您注意这一事实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM