100分,您懂的,基类竟然把拷贝,operator=给私有了

100分,你懂的,基类竟然把拷贝,operator=给私有了
C/C++ code

“CAsyncSocket::CAsyncSocket”: 无法访问 private 成员(在“CAsyncSocket”类中声明)
1>          d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxsock.h(104) : 参见“CAsyncSocket::CAsyncSocket”的声明
1>          d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxsock.h(100) : 参见“CAsyncSocket”的声明
1>          此诊断出现在编译器生成的函数“CClientSock::CClientSock(const CClientSock &)”中
1>
1>生成失败。
1>
1>已用时间 00:00:03.93
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========





class CMyServerDlg ;

/////////////////////////////////////////////////////////////////////////////
// CClientSock command target

class CClientSock : public CAsyncSocket
{

public:
    CClientSock();
    virtual ~CClientSock();
    void SetDlg(CMyServerDlg* pDlg);

public:
    virtual void OnConnect(int nErrorCode);
    virtual void OnReceive(int nErrorCode);
    virtual void OnClose(int nErrorCode);

    CMyServerDlg* m_pDlg;
    //DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CLIENTSOCK_H__A80C259D_F59B_4079_AC2F_5E18FA850C77__INCLUDED_)






错误已经提示了,很是奇怪。怎么会出错呢,不应该啊。


看这一行

on_line_userMap.insert(std::make_pair(onlineUser.UserId,onlineUser)); //添加到在线用户表中

原型为: std::map<std::string, COnLineUser> on_line_userMap; //在线用户


#pragma once
#include "ClientSock.h"
#define USER_ID_LEN 20

class COnLineUser
{
public:

public:
char UserId[USER_ID_LEN]; //用户id
time_t theLastTalkTime; //最后发言时间 
CClientSock sock; 这里用过了,看到没有,我查看器父类CAsyncSocket类貌似是把operator=给 private了,

public:
COnLineUser(void);
~COnLineUser(void);
};



以下是CAysncsocket类的部分函数:

class CAsyncSocket : public CObject
{
DECLARE_DYNAMIC(CAsyncSocket);
private:
CAsyncSocket(const CAsyncSocket& rSrc); // no implementation
void operator=(const CAsyncSocket& rSrc); // no implementation




我猜测原因是这个导致 , 怎么办,在线等



------解决方案--------------------
把operator=给私有的意思就是不许复制
------解决方案--------------------
C/C++ code
private:
CAsyncSocket(const CAsyncSocket& rSrc); // no implementation

------解决方案--------------------
为了禁止复制而把复制构造函数和操作符=都给private了,很稀奇吗?
那楼主如果知道单例模式把构造函数给private了,是不是更吃惊?
------解决方案--------------------
封装而已
------解决方案--------------------
那就是说明不给你继承的嘛。楼主可以去看看CSocket等类。或者完全自己写Socket类咯
------解决方案--------------------
探讨
C/C++ code

“CAsyncSocket::CAsyncSocket”: 无法访问 private 成员(在“CAsyncSocket”类中声明)
1> d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxsock.h(104) : 参见“CAsyncSocket::CAsy……

------解决方案--------------------
来学习,私有了怎样继承呢?
------解决方案--------------------
afx.h
C/C++ code
protected:
    CObject();
private:
    CObject(const CObject& objectSrc);              // no implementation
    void operator=(const CObject& objectSrc);       // no implementation