Я хочу добавить объект класса в STL-карту как значение в C++. Это как std::map<CString,class myClass*>myMap
. Но компиляторы показывают мне ошибку в этом. Должен ли я реализовать все перегрузки операторов сравнения для этого класса? Если нет, то как я могу это достичь? код выглядит следующим образом: // заголовочного файла функцияДобавление объекта класса в stl map как значение
#pragma once
#include "afxsock.h"
#include"NetworkDataProcessor.h"
#include"MainFrm.h"
#include"ChattingDialog.h"
#include<map>
using namespace std;
class CConnectionManager :public CAsyncSocket
{
public:
static CConnectionManager *GetClientInstance();
BOOL ClientSignIn(CString, CString);
void ConnectToServer();
public:
CString m_sendBuffer;
int m_nBytesSent;
int m_nBytesBufferSize = MAX_BUFFER_SIZE;
virtual void OnClose(int nErrorCode);
virtual void OnConnect(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
public:
std::map<CString, CChattingDialog* >ChatWindows;
private:`enter code here`
CConnectionManager();
~CConnectionManager();
static CConnectionManager * client_instance;
};
// CPP файл:
void CMyMessangerView::OnClientListClick(NMHDR* pnmh, LRESULT* pResult)
{
DWORD dwPos = ::GetMessagePos();
CPoint point((int)LOWORD(dwPos), (int)HIWORD(dwPos));
GetListCtrl().ScreenToClient(&point); int nIndex; if ((nIndex = GetListCtrl().HitTest(point)) != -1)
{
CString string = GetListCtrl().GetItemText(nIndex, 0);
CChattingDialog chatingDlg;
chatingDlg.SendToUser = string;
CString user = chatingDlg.UserRealName(string);
CConnectionManager *client = CConnectionManager::GetClientInstance();
client->ChatWindows.insert(pair<CString, CChattingDialog *>(user, &chatingDlg));
UpdateData(FALSE);
chatingDlg.DoModal();
}
*pResult = 0;
}
ОШИБКА: 15 IntelliSense: нет экземпляра перегруженных функции «станд :: Карта < _Kty, _Ty, _Pr, _Alloc> :: insert [с _Kty = CString, _Ty = CChattingDialog *, _Pr = std :: less, _Alloc = std :: allocator>] "соответствует списку аргументов Типы аргументов: (std :: pair) Тип объекта: std :: map, std :: allocator>
Ошибка 3 Ошибка C2976: 'станд :: Карта': слишком мало шаблонные аргументы C: \ Проекты \ РоС \ mymessanger \ mymessanger \ clientconnection.h 25 1 MyMessanger
Ошибка 4 Ошибка C2665: «станд :: пара :: pair ': ни одна из трех перегрузок не может преобразовать все типы аргументов c: \ projects \ poc \ mymessanger \ mymessanger \ mymessangerview.cpp 131 1 MyMessanger 16 IntelliSense: нет экземпляра конструктора "std :: pair < _Ty1, _Ty2 > :: pair [with_Ty1 = CString, _Ty2 = CChattingDialog &] "соответствует списку аргументов Типы аргументов: (CString, CChattingDialog *) c: \ Projects \ POC \ MyMessenger \ MyMessanger \ MyMessangerView.cpp 131 29 MyMessanger и т. д. ... несколько ошибок, таких как указание то же
Показать код и текст сообщения. – 0x499602D2
std :: map myMap. «класс myClass» выглядит странно. Почему вы добавляете «класс». –
user1
Мне нужна коллекция этих объектов класса вместе с ключом как строка. Я хочу получить объект этого класса в соответствии с некоторыми строковыми типами ключей. –