У меня есть этот класс сообщений, в котором есть вектор указателей сообщений, называемый child_list.child_list должен содержать адрес каждого ответа на эту тему или ответа на ответ и т. д. Я импортирую серию сообщений в вектор-указатель сообщения «все включено» для каждого адреса сообщения из файла .txt.Затем я возвращаюсь к файлу и проверяю ответ «детей» на каждое сообщение.Моя проблема возникает сразу после того, как я push_back адрес ответов на это сообщение.Я вижу, как child_list.size () растет по мере добавления элементов, но сразу после завершения цикла for я пытаюсь распечатать сообщение и вижу, что child_string.size () теперь равен 0. Почему уничтожаются указатели сообщенийпрежде чем я смогу их использовать?
//bboard.cpp
void Bboard::display() const
{
cout << endl;
message_list[0]->print();
cout << endl;
}
//add each child to the message
for(unsigned m = 0; m < children.size(); ++m)
{
cout << "id to add: " << children[m] << endl;
Message * tempPTR = message_list[ children[m]-1 ];
cout << "tempPTR: " << tempPTR << endl;
cout << endl;
cout << "\tdisplay BEFORE push to message_list[id]->add_child(tempPTR): " << endl;
display();
message_list[id]->add_child(tempPTR);
cout << endl;
display();
cout << "\tdisplay AFTER push to message_list[id]->add_child(tempPTR): " << endl;
}
cout << endl;
cout << "After the for loop to add them: " << endl;
display();
//message.cpp
void Message::add_child(Message* child)
{
this->child_list.push_back(child);
cout << "\tchild_list size: " << child_list.size() << endl;
}
//topic.cpp
//Message::print() is true virtual and is defined here for Topic
void Topic::print() const
{
cout << "Message #" << this->id << ": " << this->subject << endl;
cout << "from " << this->author << ": " << this->body << endl;
cout << "child_list Size: " << this->child_list.size() << endl;
//later, I need to add a for loop to display all the child messages
}
Выйти на терминал, показывая адреса сообщений и указатели child_list перед удалением.
Из терминала:
идентификатор сообщения: 1 находится наадрес: 0x8d45870
идентификатор сообщения: 2 находится по адресу: 0x8d45a30
идентификатор сообщения: 3 находится по адресу: 0x8d45b60
идентификатор сообщения: 4 находится по адресу: 0x8d45da0
идентификатор сообщения: 5 находится по адресу: 0x8d45ae0
идентификатор сообщения: 6 находится по адресу: 0x8d45fe0
идентификатор сообщения: 7 находится по адресу: 0x8d46170
сообщениеидентификатор: 8 находится по адресу: 0x8d46260
идентификатор сообщения: 9 находится по адресу: 0x8d46310
идентификатор сообщения: 10 находится по адресу: 0x8d45f90
идентификатор: 1
дети: 6 9
дети [м]: 6
tempPTR: 0x8d45fe0
отобразить ПЕРЕД нажатием на message_list [id] -> add_child (tempPTR):
Сообщение № 1: Назначение CS12 7
от Messi: Назначение сложное, поэтому переходите шаг за шагом.
Вы можете прочитать часть Tips & Tricks для получения справки.
child_list Размер: 0
child-> id: 6
child добавлен в список: 0x8d45fe0
child_list size: 1
Сообщение № 1: Назначение CS12 7
от Messi: Назначение сложное, поэтому переходите шаг за шагом.
Вы можетедля получения справки прочитайте раздел «Советы и рекомендации».
child_list Размер: 0
отобразить ПОСЛЕ нажатия на message_list [id] -> add_child (tempPTR):
children [m]: 9
tempPTR: 0x8d46310
отображать ДО отправки в список сообщений [id] -> add_child (tempPTR):
Сообщение № 1: Назначение CS12 7
от Месси: задание сложное, поэтому пошагово.
Вы можете прочитать часть Советы и хитрости для некоторой помощи.
child_list Размер: 0
child-> id: 9
дочерний элемент добавлен в список: 0x8d46310
размер дочернего списка: 2
Сообщение № 1: Назначение CS12 7
от Месси: назначение трудное, поэтому переходитешаг за шагом.
Вы можете прочитать часть Советы и хитрости для некоторой помощи.
child_list Размер: 0
отобразить ПОСЛЕ нажатия на message_list [id] -> add_child (tempPTR):
После цикла for для их добавления:
Сообщение № 1: Назначение CS12 7
от Messi: Назначение сложное, поэтому переходите шаг за шагом.
Вы можете прочитать часть Tips & Tricks для некоторой помощи.
child_list Размер: 0