当前位置:C++技术网 > 资讯 > “CObject::CObject”: 无法访问 private 成员

“CObject::CObject”: 无法访问 private 成员

更新时间:2016-03-25 23:07:32浏览次数:1+次

  今天编程,在对话框类中写了个成员函数,函数参数带有CListCtrl类的变量,编译的时候出现error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明) ,于是来查查原因。

  在网上查到的解答:CObject类,以及继承自它的所有MFC控件类,都是不能够复制的。为什么不能复制,我马上想到了CObject的拷贝构造函数,于是查看CObject类的定义,发现CObject的拷贝构造函数是私有的。

private:
	CObject(const CObject& objectSrc);              // no implementation
	void operator=(const CObject& objectSrc);    // no implementation
  当调用CListCtrl类的参数作为形参的函数,会调用CListCtrl类的拷贝构造函数,这时会先调用父类CObject的拷贝构造函数,而刚才已经说了,CObject的拷贝构造函数是私有的,所以这样就会编译报错error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)。

  这时的你可能会突发奇想,为什么CObject类的拷贝构造函数是私有的,在我看来,是想彻底屏蔽这样的调用,所以解决error C2248的方法就是使用引用的形参。

  然而你可能又会想到,为什么拷贝构造函数的形参是类对象的引用而不是类对象,拷贝构造函数的参数使用引用类型不是为了减少一次内存拷贝, 而是避免拷贝构造函数无限制的递归下去。下面网址的那篇文章写的不错,也解开了我的迷惑。

  参考文章地址:http://blog.csdn.net/tunsanty/article/details/4264738