错误-无法访问Omnet中创建新节点的显示字符串
Error - Cannot access display string yet for new node creation in Omnet
我正试图在运行时在Omnet中的模块中创建一个节点。我能够用这个代码创建它,并且它工作得很好。
cModule* parentmod = getParentModule();
cModule* grantParentMod = parentmod->getParentModule();
cModule* grantParentMod1 = grantParentMod->getParentModule();
// To check if the module is already created
for (cSubModIterator iter(*grantParentMod1); !iter.end(); iter++)
{
EV << iter()->getFullName()<<endl;
if (iter()->getFullName() == "host_send4")
return;
}
cModuleType *meshnode1 = cModuleType::get("inet.networklayer.manetrouting.PASER.meshnode");
cModule *mod = meshnode1->create("host_send4", grantParentMod1);
cDisplayString& dispstr = getDisplayString();
dispstr.parse("p=1000,535;r=200,green");
mod->finalizeParameters();
mod->buildInside();
mod->scheduleStart(simTime()+2*beaconInterval);
然而,该模块不是在模拟输出(坐标和显示)中的所需位置生成的。我相信这里创建的显示字符串没有连接到模块,因此我尝试通过以下方式来完成:-
cDisplayString& dispstr = getDisplayString();
dispstr.parse("p=1000,535;r=200,green");
mod->getDisplayString().set(dispstr);
但是,我在运行时遇到以下错误:-还无法访问显示字符串:参数尚未设置。我知道问题出在mod->getDisplayString().set(dispstr);
那么,是否有其他方法来分配参数,或者我是否犯了一些小错误。谢谢你的帮助。
请确保遵循OMNeT++手册中给出的模块创建过程。
如果导航到详细程序子部分,您将注意到一个全面的列表,该列表告诉应在何处执行哪个步骤:
- 查找工厂对象
- 创建模块
- 根据需要设置其参数和闸门尺寸
- 告诉(可能是复合的)模块递归地创建其内部子模块和连接
- 为新的简单模块安排激活消息
步骤3
我相信就是您要找的。以下是对步骤3
:应该做什么的详细解释
如果要设置参数值或门矢量大小(步骤3.),代码在
create()
和buildInside()
调用之间进行:// create cModuleType *moduleType = cModuleType::get("foo.nodes.WirelessNode"); cModule *module = moduleType->create("node", this); // set up parameters and gate sizes before we set up its submodules module->par("address") = ++lastAddress; module->finalizeParameters(); module->setGateSize("in", 3); module->setGateSize("out", 3); // create internals, and schedule it module->buildInside(); module->scheduleStart(simTime());
注意module->par("<parameter_name>")
函数的用法。
附言:我在写我的答案,同时你也回答了你自己的问题。如果有用的话,这个答案可以留作参考。
我把代码修改为:-
cModuleType *meshnode1 = cModuleType::get("inet.networklayer.manetrouting.PASER.meshnode");
cModule *mod = meshnode1->create("host_send4", grantParentMod1);
mod->finalizeParameters();
std::string displayString = "p=1000,535;r=200,green;i=device/smallrouter";
mod->getDisplayString().parse(displayString.c_str());
mod->buildInside();
mod->scheduleStart(simTime()+2*beaconInterval);
然后它就完美地工作了。根据我的理解,我应该在更改显示设置之前添加mod->finalizeParameters();
,并且显示字符串应该是一个简单的字符串,而不是cDisplayString对象。
相关文章:
- 反向给定链表中的K节点
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 将字符串存储在c++中的稳定内存中
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 如何将节点 V8 字符串转换为 C++ 字符串
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- 基于给定字符串数据类型的链表删除节点
- 当我将字符串放入节点>名称时,为什么会出现分段错误(核心转储)?
- 如何将 YAML 节点中的序列作为字符串返回?
- 如何获取链表中的所有"next"节点?构建调用字符串不起作用
- 如何使用libxml2从C 中的XML文件中检索节点和特定元素字符串而不使用XPATH
- 如何将XML节点数据转换为QT中的字符串
- 如何使用XPath使用libxml2从C 中的XML文件中检索节点和特定元素字符串
- 错误-无法访问Omnet中创建新节点的显示字符串
- 如何使用字符串流C++递归打印出二进制搜索树中的所有节点
- 如何找到标签等于字符串变量的树视图节点
- 在尝试打印链表节点字符串时出现c++分段错误
- c++分段错误:将字符串传递给链表中的节点
- Yaml-cpp解析混合数组/字符串节点时出现问题
- 如何将xml文件的节点存储在字符串数组中,然后在c++中存储到结构中