100分,您懂的,基类竟然把拷贝,operator=给私有了
100分,你懂的,基类竟然把拷贝,operator=给私有了
错误已经提示了,很是奇怪。怎么会出错呢,不应该啊。
看这一行
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
“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类咯
------解决方案--------------------
------解决方案--------------------
来学习,私有了怎样继承呢?
------解决方案--------------------
afx.h
- C/C++ code
protected: CObject(); private: CObject(const CObject& objectSrc); // no implementation void operator=(const CObject& objectSrc); // no implementation