Problems using std::map inside someone else code
Hello
I am using some socket classes - for example a CSocketServer class. But I
want to add to the functionality so I declare a CAgents class inside
CSocketServer like this:
class CAgents
{
public:
CAgents()
{
m_Socket = 0;
m_dwDeviceID = 0;
}; // default constructor - init values to sensible defaults
CAgents(const Socket* pSocket, const DWORD DeviceID, const std::string&
strLogin)
{
m_Socket = pSocket;
m_dwDeviceID = DeviceID;
m_strLogin = strLogin;
}
CAgents(const CAgents& rhs)
:m_Socket(rhs.GetSocket()), m_dwDeviceID(rhs.GetDeviceID()),
m_strLogin(rhs.GetLogin())
{}; // assign rhs = eg
const Socket* m_Socket; // ptr to socket for client
DWORD m_dwDeviceID; // (DeviceID) extn
std::string m_strLogin; // logon
DWORD GetDeviceID() const
{
return m_dwDeviceID;
}
std::string GetLogin() const
{
return m_strLogin;
}
const Socket* GetSocket() const
{
return m_Socket;
}
CAgents& operator=(const CAgents& rhs)
{
m_Socket = rhs.GetSocket();
m_dwDeviceID = rhs.GetDeviceID();
m_strLogin = rhs.GetLogin();
return *this;
}
};
I can create CAgents no problem at all. Eg:
CAgents myagent; // default constructor - just initialises everything to
basic values
myagent.m_Socket = 0;
myagent.m_dwDeviceID = 8;
myagent.m_strLogin = "Sarah";
CAgents heragent = myagent; // operator=
CAgents thisagent(0, 3, "Angus");
But when I try to use std::map I get compilation problems.
For example,
// std::map<Key,Val>:
std::map<int, CAgents> m_AgentsList;
m_AgentsList[8] = myagent; // compile error line
SocketServer.cpp(410) : error C2678: binary '[' : no operator defined which
takes a left-hand operand of type 'const class std::map<int,class
CSocketServer::CAgents,struct std::less<int>,class std::allocator<class
CSocketServer::CAgents> >' (or there is no acceptable conversion)
I don't get these compilation errors if I setup a test program using CAgents
and std::map but NOT using CSocketServer.
What is it about the SocketServer class or classes I am using that gives me
this headache? How can I resolve?
Angus