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);
}

如此操作后,不再报上面的错误!问题解决

时间: 2024-10-14 09:07:40

VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)的相关文章

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

MFC编码时报错: 显示:error C2248: "CObject::operator =": 无法访问 private 成员(在"CObject"类中声明) 这种问题是你刚开始声明的是指针类型变量,后来又改为了非指针型,最好直接使用指针型变量. 

“CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)

c++工程编译报错: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明) 错误无法直接定位源码位置,网上搜索了,也和我的代码不一样. 最后还是自己认真检查代码,发现了个问题 头文件定义了一个CEvent x, 源码文件中使用了 x = new CEvent(true,false); 原来是这里错误了,x是一个直接实例化了的对象,不能再指向另一个实例,只有指针才能这样用. 于是改为CEVent* x;就可以了.

c++ friend 遇到 namespace 无法访问 private 成员的问题

相关的文章(比较有意思,记录一下):http://www.cnblogs.com/lx20030303/archive/2012/09/21/2696258.html 先看例子.如下. 尝试编译的话,错误提示: Entrance.cppsrc\Entrance.cpp(15) : error C2248: “lqr::Entrance::id”: 无法访问 private 成员(在“lqr::Entrance”类中声明) C:\Users\Administrator\Desktop\tmp\in

基类成员在派生类中的访问属性——总结

首先回顾一下三种成员访问限定符: public(公用的):既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数(即类外)引用. private(私有的):只能被本类中的成员函数引用,类外不能调用(友元类除外) protected(受保护的):不能被类外访问,但可以在派生类的成员函数访问. 接下来就用一张表总结一下基类成员在派生类中的访问属性: 参考资料:<C++程序设计(第二版)>--谭浩强

C++用指针访问private 成员

// //  main.cpp //  使用指针访问类中的私有变量 // //  Created by 就不告诉你我是谁 on 15-7-25. //  Copyright (c) 2015年 xuqigang. All rights reserved. // #include <iostream> using namespace std; class Class1{ public: Class1(){ } private: int a=10; int k=100; }; int main(i

C++——派生类中的访问——可见性问题

C++中派生类对基类成员的访问形式主要有以下两种: 1.内部访问:由派生类中新增成员对基类继承来的成员的访问. 2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中继承方式下,派生类对基类成员的访问规则. 1.私有继承的访问规则 当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是在类的外部通过派生类的对象无法访问.基类的private成员在私有派生类中是不

派生类成员函数调用时 error C2248: 无法访问 protected 成员 的排雷之路

工作需要自定义一个控件,结果调用成员函数总是报错!如下图:理论上继承关系和函数权限public都没有问题,可是只要一使用自定义的成员函数就会报error C2248: 无法访问 protected 成员 ,查了很久资料,总算试出了解决方案,就是加强制声明public:即在成员函数声明时强制在前面加public:,对于上例就是在自定义SetTextEx前面加.如图:原因分析:语法上没有问题就可能是编译器编译时默认给继承类的成员函数都默认加了protected 的属性,虽然是放在public区域,可

Java如何访问private变量

大家都知道private变量是无法访问的,一编译就报错根本无法访问啊.本文教你如何破解这种限制. 实现的原理是利用了Java的反射机制. 首先定义一个最简单的类,只有一个私有变量和一个公开的方法.代码如下: class Foo { private String message = "This is a Foo."; public void show() { System.out.println(message); } } 正常情况下调用show函数会输出“This is a Foo.”

Java如何访问private变量?

大家都知道private变量是无法访问的,一编译就报错根本无法访问啊.本文教你如何破解这种限制. 实现的原理是利用了Java的反射机制. 首先定义一个最简单的类,只有一个私有变量和一个公开的方法.代码如下: class Foo { private String message = "This is a Foo."; public void show() { System.out.println(message); } } 正常情况下调用show函数会输出"This is a