zoukankan      html  css  js  c++  java
  • 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);
    }
    如此操作后,不再报上面的错误!问题解决
  • 相关阅读:
    mailto 调用邮件客户端乱码问题的解决办法
    MySQL开启慢查询
    Java 模拟 Http Post
    使用XSLT转换XML2XML
    上传File时,浏览器总是添加<pre>的解决办法
    转:简单SQL语句小结
    我的crm报告竣工了!
    vs2005快捷键
    转:C# 参考之转换关键字:operator、explicit与implicit
    正值表达式2
  • 原文地址:https://www.cnblogs.com/lujin49/p/4958545.html
Copyright © 2011-2022 走看看