Push_back元素在添加后消失

时间:2011-05-26 00:13:20

标签: c++ oop

我有这个消息类,它有一个名为child_list的消息指针向量。 child_list应该包含对该主题的每个回复的地址或回复回复等。我将一系列消息导入到.txt文件中每个消息地址的全包消息指针向量中。然后我返回文件并检查每条消息的“儿童”回复。在我将回复的地址推送回该消息之后,我的问题就发生了。 我可以看到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指针。

从终端:

消息ID:1位于地址:0x8d45870

消息ID:2位于地址:0x8d45a30

消息ID:3位于地址:0x8d45b60

消息ID:4位于地址:0x8d45da0

消息ID:5位于地址:0x8d45ae0

消息ID:6位于地址:0x8d45fe0

消息ID:7位于地址:0x8d46170

消息ID:8位于地址:0x8d46260

消息ID:9位于地址:0x8d46310

消息ID:10位于地址:0x8d45f90

id:1

儿童:6 9

孩子[m]:6

tempPTR:0x8d45fe0

显示BEFORE按下到message_list [id] - &gt; add_child(tempPTR):

消息#1:CS12作业7

来自梅西:任务很难,所以一步一步走。

你可以阅读提示&amp;欺骗部分寻求帮助。

child_list大小:0

child-&gt; id:6

child添加到列表:0x8d45fe0

child_list size:1

消息#1:CS12作业7

来自梅西:任务很难,所以一步一步走。

你可以阅读提示&amp;欺骗部分寻求帮助。

child_list大小:0

显示AFTER按下到message_list [id] - &gt; add_child(tempPTR):

孩子[m]:9

tempPTR:0x8d46310

显示BEFORE按下到message_list [id] - &gt; add_child(tempPTR):

消息#1:CS12作业7

来自梅西:任务很难,所以一步一步走。

你可以阅读提示&amp;欺骗部分寻求帮助。

child_list大小:0

child-&gt; id:9

child添加到列表:0x8d46310

child_list size:2

消息#1:CS12作业7

来自梅西:任务很难,所以一步一步走。

你可以阅读提示&amp;欺骗部分寻求帮助。

child_list大小:0

显示AFTER按下到message_list [id] - &gt; add_child(tempPTR):

在for循环之后添加它们:

消息#1:CS12作业7

来自梅西:任务很难,所以一步一步走。

你可以阅读提示&amp;欺骗部分寻求帮助。

child_list大小:0

1 个答案:

答案 0 :(得分:0)

您要使用方法void Message::add_child(Message* child)添加到列表中,然后尝试使用void Topic::print() const打印出列表。

MessageTopic类是否通过继承相互关联?或者他们都持有对同一个child_list实例的引用?

从您发布的代码中我认为有多个child_list向量,您可能是从错误的那个打印出来的?