【发布时间】:2021-06-10 16:26:19
【问题描述】:
考虑一下:我有一个开关(灰色方块),它是一个复合模块。在这个开关内部,还有更多的复合模块。基本上有3层复合模块,绿色圆角方块里面是简单模块。
我的问题出现在绿色圆形模块内。我创建一个标签并将其分配给到达第一个绿色模块的每个帧。然后由第一个绿色模块内的其他简单模块完成其他一些处理步骤(基于标签中包含的信息)。现在,当离开第一个绿色复合模块并进入第二个(红色箭头)时,不知何故我的标签和它的所有信息都丢失了。
我在第一个绿色模块中添加标签,如下所示:
void filterPrep::handleMessage(cMessage* msg){
if(msg->isSelfMsg()){
}
else{
inet::Packet* packet = check_and_cast<inet::Packet*>(msg);
FilterTag* tag;
tag = packet->addTag<FilterTag>();
tag->setValue1(someValue); //This works fine
}
send(msg, "out");
}
我像这样读取第一个绿色模块中每个简单模块中的标签。这工作正常,但在第二个绿色模块(例如下一个复合模块)中,这会产生 nullptr
void filtering::handleMessage(cMessage* msg){
if(msg->isSelfMsg()){
}
else{
inet::Packet* packet = check_and_cast<inet::Packet*>(msg);
FilterTag* fetchedTag;
fetchedTag = packet->getTag<FilterTag>(); // throws exception
fetchedTag->getValue1();
}
}
我不知道为什么会发生这种情况,你能帮帮我吗?
【问题讨论】:
-
不清楚会发生什么。首先你说一些东西返回一个'nullptr'然后在源代码中也注释了一行它引发了异常?现在发生了哪一个?