Элементы Push_back исчезают после добавления - PullRequest
0 голосов
/ 26 мая 2011

У меня есть этот класс сообщений, в котором есть вектор указателей сообщений, называемый 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

1 Ответ

0 голосов
/ 26 мая 2011

Вы добавляете в список с помощью метода void Message::add_child(Message* child), а затем пытаетесь распечатать список с помощью void Topic::print() const.

Связаны ли классы Message и Topic друг с другом через наследование? или они оба содержат ссылку на один и тот же экземпляр child_list?

Из кода, который вы разместили, я думаю, что есть несколько child_list векторов, и вы печатаете с неправильного, возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...