Push_back元素在添加后会消失

Push_back elements dissapear after being added

本文关键字:消失 添加 back 元素 Push      更新时间:2023-10-16

我有一个消息类,它有一个名为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
}

Oput到终端,显示删除前的消息地址和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]->add_child(tempPTR):

消息#1:C12分配7

来自梅西:任务很难,所以要循序渐进。

您可以阅读Tips&技巧部分是为了得到一些帮助。

child_list大小:0

child->id:6

添加到列表的子项:0x8d45fe0

child_list大小:1

消息#1:C12分配7

来自梅西:任务很难,所以要循序渐进。

您可以阅读Tips&技巧部分是为了得到一些帮助。

child_list大小:0

显示AFTER推送至message_list[id]->add_child(tempPTR):

儿童[m]:9

tempPTR:0x8d46310

显示BEFORE推送至message_list[id]->add_child(tempPTR):

消息#1:C12分配7

来自梅西:任务很难,所以要循序渐进。

您可以阅读Tips&技巧部分是为了得到一些帮助。

child_list大小:0

child->id:9

添加到列表的子项:0x8d46310

child_list大小:2

消息#1:C12分配7

来自梅西:任务很难,所以要循序渐进。

您可以阅读Tips&技巧部分是为了得到一些帮助。

child_list大小:0

显示AFTER推送至message_list[id]->add_child(tempPTR):

在for循环之后添加它们:

消息#1:C12分配7

来自梅西:任务很难,所以要循序渐进。

您可以阅读Tips&技巧部分是为了得到一些帮助。

child_list大小:0

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

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

从你发布的代码来看,我认为有多个child_list矢量,而你可能是从错误的矢量打印的?