У меня есть простая иерархия, которая состоит из Агента, который имеет элемент данных ConversationManager con_manager*
, который обрабатывает произвольное количество разговоров в std::vector<Conversation> conversations
, которые сами содержат 1-5 сообщений в 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)
, являются просто копией и, следовательно, модификации не сохраняются. Но std::Vector::back()
возвращает ссылку, поэтому это должно быть невозможно.
Я пробовал иметь только один объект Conversation без ConversationManager, и затем сообщения сохраняются на постоянной основе. У меня есть ощущение, что проблема заключается в моем неправильном понимании использования ссылок. Я не думаю, что для понимания требуется больше кода, но я могу предоставить его, если кто-то сочтет это необходимым. Любая помощь в отношении того, почему это происходит, будет принята с благодарностью, я думаю, что я делаю здесь фундаментальную ошибку, но не могу выбраться из-под мышления "Этого не должно быть".