CAPL脚本中如何在for循环内输出动态变化的报文?
问题解决方法
你遇到的核心问题是output()函数需要接收cMessage类型的对象指针,而非报文名称的字符串——直接传字符串类型肯定会触发类型不兼容的报错。
修改后的代码
on timer F{ for (i = 1; i <= floodingInput; i++) { snprintf(msgIterationString, elcount(msgIterationString), "TEST_MSG_%d", i); write("%s", msgIterationString); // 根据名称查找已定义的报文对象 cMessage *targetMsg = getSimulation()->findObject(msgIterationString); if (targetMsg != nullptr) { output(targetMsg); } else { write("Error: 未找到报文 %s", msgIterationString); } } }
关键说明
getSimulation()->findObject()方法可以根据字符串名称,在整个仿真环境中查找对应的cMessage实例,找到后再传入output()就能正常执行。- 必须确保
TEST_MSG_1、TEST_MSG_2等是已经在仿真中创建完成的cMessage对象,且名称与字符串完全匹配(包含大小写、数字后缀)。
内容的提问来源于stack exchange,提问作者Cooper Myers
相关产品推荐
相关产品推荐

