使用 std::map::at 时出错
Error using std::map::at
我的地图定义为:
map<std::string,std::vector<message *> > data;
其中 std::string
指的是用户名(主键),std::vector<message *>
指的是与特定用户名对应的消息。 Message 是一个包含消息 ID、时间和消息文本的结构。因此,为了再推回一条消息,我使用了如下代码:
std::vector<message *> messages = data.at[recvbuf_usrn];
messages.push_back(new message(*recvbuf_msg,currentDateTime()));
data[*recvbuf_usrn] = messages;
但我得到一个错误:
error C3867: 'std::map<_Kty,_Ty>::at': function call missing argument list; use '&std::map<_Kty,_Ty>::at' to create a pointer to member
其中recvbuf_usrn和recvbuf_msg定义如下:
std::string *recvbuf_usrn=new std::string;
std::string *recvbuf_msg=new std::string;
我该如何解决?
应该是
data.at(recvbuf_usrn);
(at
和parents)。
或
data[recvbuf_usrn];
顺便说一句,return 一个参考,所以你可以简单地做:
auto& messages = data[recvbuf_usrn];
messages.push_back(new message(*recvbuf_msg, currentDateTime()));
您可能还应该使用智能指针:
std::map<std::string, std::vector<std::unique_ptr<message>>> data;
std::map::at
是一个函数,你应该这样称呼它:
std::vector<message *> messages = data.at(*recvbuf_usrn);
如果您想使用 std::map::operator[]
,您应该:
std::vector<message *> messages = data[*recvbuf_usrn];
我的地图定义为:
map<std::string,std::vector<message *> > data;
其中 std::string
指的是用户名(主键),std::vector<message *>
指的是与特定用户名对应的消息。 Message 是一个包含消息 ID、时间和消息文本的结构。因此,为了再推回一条消息,我使用了如下代码:
std::vector<message *> messages = data.at[recvbuf_usrn];
messages.push_back(new message(*recvbuf_msg,currentDateTime()));
data[*recvbuf_usrn] = messages;
但我得到一个错误:
error C3867: 'std::map<_Kty,_Ty>::at': function call missing argument list; use '&std::map<_Kty,_Ty>::at' to create a pointer to member
其中recvbuf_usrn和recvbuf_msg定义如下:
std::string *recvbuf_usrn=new std::string;
std::string *recvbuf_msg=new std::string;
我该如何解决?
应该是
data.at(recvbuf_usrn);
(at
和parents)。
或
data[recvbuf_usrn];
顺便说一句,return 一个参考,所以你可以简单地做:
auto& messages = data[recvbuf_usrn];
messages.push_back(new message(*recvbuf_msg, currentDateTime()));
您可能还应该使用智能指针:
std::map<std::string, std::vector<std::unique_ptr<message>>> data;
std::map::at
是一个函数,你应该这样称呼它:
std::vector<message *> messages = data.at(*recvbuf_usrn);
如果您想使用 std::map::operator[]
,您应该:
std::vector<message *> messages = data[*recvbuf_usrn];