• VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)


    在使用诸如:CArray或是 CList等类时,经常会出现此错误

    此错误的原因是由于自定义的类的数组项时

    有一个操作如  Add()  在这个操作中,实际上需要一个 = 操作,但是这个 =操作在 自定义类中没有实现,于是,程序自动去它的parent 类 也就是 CObject 类去找,但是却找到个这个类的 = 是一个 private  于是就报了这个错误.

    知道了原因解决方法自然就有了,那就是在自定义类中 重载操作符 =   重载后 这个错误就没有了.

    class COptRect : public CObject
    {
    
    public:
        COptRect();
        virtual ~COptRect();
        // 操作的起始范围
        CRect m_OptStartRect;
        // 操作的结束范围
        CRect m_OptEndRect;
        // 操作的目标界面
        int m_OptDesSurface;
    
        COptRect& operator = (COptRect & src);
    
    };

    实现代码

    COptRect::COptRect()
        : m_OptDesSurface(0)
    {
    }
    
    COptRect::~COptRect()
    {
    }
    
    COptRect& COptRect::operator = (COptRect & src)
    {
        this->m_OptDesSurface = src.m_OptDesSurface;
        this->m_OptEndRect = src.m_OptEndRect;
        this->m_OptStartRect = src.m_OptStartRect;
        return *this;
    }

    那么在实现了这个自定义类后,开始使用它

    先定义变量数组

    CArray<COptRect, COptRect&> optArray;

    在这个数组后,我们使用一个添加新元素的命令

    // 向界面添加一个操作区域
    void CSurface::AddOptRect(CRect Start, CRect End, int DesID)
    {
        COptRect ort;
        ort.m_OptStartRect = Start;
        ort.m_OptEndRect = End;
        ort.m_OptDesSurface = DesID;
        optArray.Add(ort);
    }
    如此操作后,不再报上面的错误!问题解决
  • 相关阅读:
    数据表的水平拆分
    高性能网站架构
    文本框内容改变触发事件
    树莓派3B(1)- Raspberry Pi 3B 安装系统并联网
    一年经验Java程序员面经小记
    Windows系统安装总结
    树莓派3B(2)- 配置多个wifi,自动寻找可用网络
    Centos7 Apache实现Http访问SVN资源库
    Centos7搭建svn服务
    读《重构 改善既有代码的设计》有感
  • 原文地址:https://www.cnblogs.com/lujin49/p/4958545.html
Copyright © 2020-2023  润新知