使用Omnet 5.3在Castalia3.3上运行示例时,出现“无法从整数转换为双精度”错误

时间:2018-07-31 17:54:08

标签: casting omnet++

当我在ubuntu上使用Omnet5.3运行Castalia 3.3的任何示例时,例如ConnectivityMap一,我得到此错误:

无法评估参数'packetSpacing':(omnetpp :: cIntParImpl)packetSpacing:无法从整数类型转换为双精度-在模块(ConnectivityMap)SN.node [1] .Application(id = 25)中,在t = 0.003536244016s,事件#13 ”。

当我查看SensorNetwork.ned文件时,我发现了双重类型的参数

参数:

double field_x = default (30);          // the length of the deployment field
double field_y = default (30);          // the width of the deployment field
double field_z = default (0);           // the height of the deployment field (2-D field by default)

int numNodes;                       // the number of nodes

string deployment = default ("");

int numPhysicalProcesses = default (1);
string physicalProcessName = default ("CustomizablePhysicalProcess");
string wirelessChannelName = default ("WirelessChannel");
string debugInfoFileName = default ("Castalia-Trace.txt");

这是一个错误问题吗?新版本的omnet是否存在参数转换问题? 请帮助我,我还不是Omnet的专家

1 个答案:

答案 0 :(得分:2)

否,这不是错误,是自OMNeT++ 5.3起的有意更改。
表达式:

(double) par("packetSpacing")

导致呼叫doubleValue()cPar.h中对此方法有以下描述:

  

将值返回为两倍。 cPar类型必须为DOUBLE。
    注意:故意从INT隐式转换。


解决此问题的方法有两种:

  1. packetSpacing中将int形式的double的类型更改为ConnectivityMap.ned

  1. 通过添加int(例如在intValue()中强制将参数读取为ConnectivityMap.cc

    packetSpacing = (double) par("packetSpacing").intValue() / 1000.0;