2016-04-07 1 views
0

で私はとして定義されたマップを持っています。 Messageは、メッセージID、時間、メッセージテキストを含む構造体です。したがって、別のメッセージを押し戻すために、私は次のコードを使用しエラー::マップ::

std::vector<message *> messages = data.at[recvbuf_usrn]; 
messages.push_back(new message(*recvbuf_msg,currentDateTime())); 
data[*recvbuf_usrn] = messages; 

を私はエラーを取得:recvbuf_usrnとrecvbuf_msgのように定義されている

error C3867: 'std::map<_Kty,_Ty>::at': function call missing argument list; use '&std::map<_Kty,_Ty>::at' to create a pointer to member 

は、以下:

std::string *recvbuf_usrn=new std::string; 
std::string *recvbuf_msg=new std::string; 

どうすれば解決できますか?

答えて

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; 
1

std::map::atは関数は、あなたがすべきです

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

std::map::operator[]を使用する場合は、次のようにする必要があります。

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