error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
来源:互联网 发布:mac ant root 编辑:程序博客网 时间:2024/06/05 12:42
碰到这个棘手的问题,我知道这个MFC底层的错误,可我对底层知之剩少。昨天看了网上的资料,可看不懂,今天又看了同样的东西,看明白了。
先看一段示例代码:
1 #define C2248_SWITCH 0
2
3 struct A
4 {
5 int a;
6 };
7
8 struct B
9 {
10 CArray<A, A&> b;
11 #if C2248_SWITCH
12 const B& operator=(const B& rhs)
13 {
14 if(this != &rhs)
15 {
16 b.RemoveAll();
17 b.Append(rhs.b);
18 b.FreeExtra();
19 }
20
21 return *this;
22 }
23 #endif
24 };
25
26 typedef CArray<B, B&> C;
27
28 void test()
29 {
30 B b;
31 C c;
32 c.Add(b); // C2248, C2248_SWITCH is defined as 0.
33 }
34
2
3 struct A
4 {
5 int a;
6 };
7
8 struct B
9 {
10 CArray<A, A&> b;
11 #if C2248_SWITCH
12 const B& operator=(const B& rhs)
13 {
14 if(this != &rhs)
15 {
16 b.RemoveAll();
17 b.Append(rhs.b);
18 b.FreeExtra();
19 }
20
21 return *this;
22 }
23 #endif
24 };
25
26 typedef CArray<B, B&> C;
27
28 void test()
29 {
30 B b;
31 C c;
32 c.Add(b); // C2248, C2248_SWITCH is defined as 0.
33 }
34
编译时产生如下信息:
1 Compiling
2 CArrayTest.cpp
3 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h(272) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
4 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(559) : see declaration of 'CObject::operator ='
5 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : see declaration of 'CObject'
6 This diagnostic occurred in the compiler generated function 'CArray<TYPE,ARG_TYPE> &CArray<TYPE,ARG_TYPE>::operator =(const CArray<TYPE,ARG_TYPE> &)'
7 with
8 [
9 TYPE=A,
10 ARG_TYPE=A &
11 ]
从以上的编译信息line9, line10可以看出是struct B默认的operator=运算符函数(由编译器自动产生)出现了问题。因为struct B有一个CArray<A, A&>的成员变量,而CArray<A, A&>类的operator=是private类型(它继承自CObject::operator=,且被定义为private类型)。所以我们要在struct B中重载operator=运算符,且把它声明为public类型(struct中的成员变量和成员函数默认就是public类型,所以不用显式的指明public).2 CArrayTest.cpp
3 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h(272) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
4 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(559) : see declaration of 'CObject::operator ='
5 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : see declaration of 'CObject'
6 This diagnostic occurred in the compiler generated function 'CArray<TYPE,ARG_TYPE> &CArray<TYPE,ARG_TYPE>::operator =(const CArray<TYPE,ARG_TYPE> &)'
7 with
8 [
9 TYPE=A,
10 ARG_TYPE=A &
11 ]
在本示例代码中,只需把C2248_SWITCH定义为1即可。 由本例可以看出,如果我们的类/结构体中有CArray(或CList等其他的派生自CObject类)的成员变量,我们最好添加上一个public类型的operator=运算赋重载函数。
来自:http://www.cppblog.com/hlong/archive/2007/11/20/37015.html
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class
- error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
- Visual C++ error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject
- CstringArray error C2248: 'CObject::CObject' : cannot access private member declared in class
- error C2248: cannot access private member declared in class
- error C2248: 'std::basic_ios::basic_ios' : cannot access private member declared in class 'std::basic_ios'
- error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'全解
- error C2248: cannot access protected member declared in class '****'
- 错误1 error C2248: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
- C++ error C2248: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明
- error C2248: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
- div错位/解决IE6、IE7、IE8样式不兼容问题
- active连接数暴增
- sql查询一段日期内的某个时间段的数据量,该如何解决
- 写一个最短的不会重复的随机数
- 好记性不如烂笔头,关于hibernate异常
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- MP3文件格式
- C/C++ 笔试、面试题目大汇总
- 自定义ExtJS控件之下拉树和下拉表格附源码
- Lambda Grinding Miller From Zenith
- JQuery函数大全
- 使用CCHttpClient进行cocos2d-x网络编程
- div模拟滚动条
- Android 基于位置服务的基本知识