我在一个ned文件中定义了以下模块:
@namespace(cbsdsim);
simple SASSim {
parameters:
@class(SASSim);
int maxCbsdsPerSas = 10;
}
我通过调用以下内容(来自另一个模块)来创建模块:
cModuleType* sasSimModType = cModuleType::find("SASSim");
sasSimModType->setName("SASSim");
char* name = "SAS.1";
SASSim* sasSimMod = (SASSim*) sasSimModType->create(name,parent);
调用SASSim的构造函数。这是构造函数:
SASSim::SASSim() {
cout << " SASSim::SASSim" << endl;
//this->finalizeParameters();
int cbsdFanIn = par("maxCbsdPerSas");
.....
}
然而omnetpp对于在上面的代码片段中调用par(...)感到不满意。我收到一个异常和一个令人困惑的错误消息:
what(): (omnetpp::cModule): Object has no associated cComponentType (maybe omnetpp::cModule is not derived from cModule/cChannel?)
当我在构造函数中添加this-&gt; getNumParams()时,它返回0.如果我对参数进行硬编码,初始化工作正常,所以我假设我需要做一些事情来加载参数。我可以,可能把参数放在omnetpp.ini或其他地方,但我想知道为什么这不起作用。在调用create加载params之前我必须做些什么吗?谢谢,
答案 0 :(得分:0)
您只能在初始化后访问参数 - 而不是在模块的构造函数中。这有点奇怪,因为创建cGates等可以从构造函数中正常工作。