CObject:operator = 无法访问私成事员(在CObject类中声明)解决方案

在MFC里,CObject的拷贝构造为私有,所以凡是从CObject派生的类,都不能通过拷贝构造来创建新实例,这样做是为了防止浅拷贝,如果要传递一个参数,一般传引用或者指针

如在我的:class CNewTaskInfos : public CObject,CNewTaskInfos继承自 CObject类,而在另一个类中的一个函数需要传递CNewTaskInfos的对象,例如:

CHTTPDownload.h
1
2
3
4
5
6
7
8
class CHTTPDownload
{
public:
    .....
    BOOL StartTask(CNewTaskInfos newTask);  // 启动下载

    ......
}

  CHTTPDOload.cpp
1
2
3
4
5
BOOL CHTTPDownload::StartTask(CNewTaskInfos newTask)  
{
    newTaskInfo = newTask;
    .....
}

如果这样写,编译时就会报“CObject:operator = 无法访问私成事员(在CObject类中声明)”类似的错误,这是因为CObject的=操作符(operator = )是私有

的,newTaskInfo = newTask则在其他类中,以公有的形式调用了operator = ),正确解决方案是:将传递的参数设为指针或应用;如:

CHTTPDownload.h
1
2
3
4
5
6
7
8
class CHTTPDownload
{
public:
    .....
    BOOL StartTask(CNewTaskInfos*  newTask);  // 启动下载

    ......
}
CHTTPDOload.cpp
1
2
3
4
5
BOOL CHTTPDownload::StartTask(CNewTaskInfos* newTask)  
{
    newTaskInfo = newTask;  // 这里newTaskInfo为CNewTaskInfos*
    .....
}

其他情况类似,主要注意创建实例时,避免operate = 的直接使用。



你可能感兴趣的:(CObject:operator = 无法访问私成事员(在CObject类中声明)解决方案)