2016-04-07 13 views
0

azından bir harita tanımlanmış olması. Mesaj, mesaj kimliği, zaman ve mesaj metnini içeren bir yapıdır. Bu nedenle, bir mesaj daha itmek için, ben şu kodu kullanın:hata ::

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

ama bir hata alıyorum: recvbuf_usrn ve recvbuf_msg olarak tanımlanan

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

aşağıdaki gibidir:

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

Bunu nasıl çözebilirim?

cevap

1

O olmalıdır

(ebeveynleri ile at)
data.at(recvbuf_usrn); 

. veya

data[recvbuf_usrn]; 
başvuru döndürmek BTW

, bu yüzden sadece yapabilirsiniz:

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

Muhtemelen de akıllı işaretçi kullanmalısınız:

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

std::map::at fonksiyonu, sen gerektiğidir olarak adlandırın:

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

std::map::operator[]'u kullanmak isterseniz, şunları yapmanız gerekir:

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