我有一个简单的层次结构,其中包含一个具有Conversationmanager con_manager*
数据成员的代理,该数据成员处理std::vector<Conversation> conversations
中的任意数量的会话,而这些会话本身在{{ 1}}。
如果我通过进行对话
std::Vector<Message> messages
消息已正确保存。 但是通过添加邮件
后Conversationmanager::startConversation(Message &message) {
Conversation conversation = Conversation(message);
conversations.push_back(conversation)
}
和
int Conversationmanager::addMessage(Message &message){
if(conversations.size() > 0){
Conversation conversation = conversations.back();
conversation.addMessage(message);
return 0;
}
return -1;
}
除第一个消息以外的后续消息均未保存。在int Conversation::addMessage(Message &message){
…
messages.push_back(message);
…
}
中打印messages
的大小和内容表明,我的消息已保存在该函数中,但是在函数范围结束时似乎丢失了。据我了解,一种解释是Conversation::addMessage(Message &message)
中使用的conversation
对象只是一个副本,因此不保存修改。但是Conversationmanager::addMessage(Message &message)
返回一个引用,因此应该是不可能的。
我尝试仅使用一个Conversation对象而不使用Conversationmanager,然后将消息永久保存。我觉得问题出在我对参考用法的误解。我认为理解不需要更多的代码,但是如果有人认为需要,我可以提供它。对于出现这种情况的任何帮助,我们将不胜感激,我想我在这里犯了一个根本性的错误,但不能摆脱“这不应该发生”的思想观念。