我有这个消息类,它有一个名为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
答案 0 :(得分:0)
您要使用方法void Message::add_child(Message* child)
添加到列表中,然后尝试使用void Topic::print() const
打印出列表。
Message
和Topic
类是否通过继承相互关联?或者他们都持有对同一个child_list
实例的引用?
从您发布的代码中我认为有多个child_list
向量,您可能是从错误的那个打印出来的?