【问题标题】:Error using std::map::at使用 std::map::at 时出错
【发布时间】:2016-04-07 09:01:01
【问题描述】:

我的地图定义为:

map<std::string,std::vector<message *> > data;

其中std::string 指的是用户名(主键),std::vector&lt;message *&gt; 指的是与特定用户名对应的消息。 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;

我该如何解决?

【问题讨论】:

    标签: c++ pointers dictionary vector push-back


    【解决方案1】:

    应该是

    data.at(recvbuf_usrn);
    

    at与父母)。 或

    data[recvbuf_usrn];
    

    顺便说一句,它返回一个引用,所以你可以简单地这样做:

    auto& messages = data[recvbuf_usrn];
    messages.push_back(new message(*recvbuf_msg, currentDateTime()));
    

    您可能还应该使用智能指针:

    std::map<std::string, std::vector<std::unique_ptr<message>>> data;
    

    【讨论】:

      【解决方案2】:

      std::map::at 是函数,你应该这样称呼它:

      std::vector<message *> messages = data.at(*recvbuf_usrn);
      

      如果你想使用std::map::operator[],你应该:

      std::vector<message *> messages = data[*recvbuf_usrn];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多