OMNeT ++:网络设置期间模块出错:找不到类

时间:2015-07-08 12:38:59

标签: eclipse-cdt omnet++

我创建了我的第一个OMNeT ++ / veins项目,但无法启动模拟。 你能救我吗?

我想改变我的问题 - 是否有一种简单的方法来创建一个项目,类似于静脉的RSUExampleScenario,而不是在veins / examples / myfolder下,而是在一个单独的项目和工作区中?我必须采取哪些措施呢?

我想从静脉创建类似于RSUExampleScenario的项目,但是使用其他场景并使用其他OMNeT ++模块。当我在veins / examples / myfolder下创建我的项目,并将我的新.ned文件放在静态结构下时,它运行正常。

现在我创建了新项目,包括带有.ned和c ++ / h文件的文件夹,例如文件夹 connection (Connection.ned,Connection.cc,Connection.h,package.ned)和文件夹< em> node (CloudVehicleScenarioMessage.ned,Cloud.ned)和模拟文件夹 cloudvehiclehi (omnetpp.ini)。

当我开始模拟时,我收到错误:

模块(cCompoundModule)中的错误CloudVehicleScenarioMessage(id = 1)在网络设置期间:未找到类“连接” - 可能其代码未链接,或者类未注册Register_Class(),或者在模块和通道的情况下,使用Define_Module()/ Define_Channel()。

我猜NED文件已加载,但无法找到c ++文件中的类,但我使用了 Define_Module 。云只是一个复合模块,没有任何自己的c ++实现,它不会产生任何问题。 Connection是一个简单的模块,指的是Connection.cc类,其中调用了Define_Module()并在加载时导致错误。 我的所有文件夹,如 node connection 都包含在内,我可以在项目 - &gt;属性 - &gt;路径和符号 - &gt;包含

我已经尝试重建OMNeT ++(如此处https://www.linkedin.com/grp/post/3801609-234767834所述)并为我的类定义名称空间(如Problem in defining a module in omnetpp所述),但它没有帮助。

我证明了我的makefile并且链接了文件夹(如https://groups.google.com/forum/#!topic/omnetpp/Cl48hVgkbQ0所述)。

CloudVehicleScenarioMessage.ned是omnetpp.ini中的网络。

节点/ CloudVehicleScenarioMessage.ned:

package cloudbasedcsw.nodes;

import cloudbasedcsw.nodes.ScenarioMobility;
import cloudbasedcsw.nodes.Cloud;
import cloudbasedcsw.connection.Connection;

network CloudVehicleScenarioMessage extends ScenarioMobility
{
@display("bgb=540,555");
submodules:
    cloud[1]: Cloud {
        @display("p=150,140;b=10,10,oval");
    }
    con: Connection {
        @display("p=200,40;b=10,10,oval");
    }
}

模块连接文件

连接/ Connection.ned

package cloudbasedcsw.connection;

simple Connection{
    @class(CloudBasedCSW::Connection);
}

类连接,无法找到:

连接/ Connection.cc

#include <Connection.h>
#include <VehicleListener.h>
#include <iostream>
using CloudBasedCSW::Connection;

Define_Module(CloudBasedCSW::Connection);

void Connection::initialize(int stage){

}

void Connection::connectToCloud(cModule* node){
}

void Connection::disconnectFromCloud(cModule* node){
}

Connection.h

#ifndef CONNECTION_H_
#define CONNECTION_H_
#include <omnetpp.h>

namespace CloudBasedCSW{

class Connection: public cSimpleModule{
public:
    cModule* scenario;
    void connectToCloud(cModule* node);
    void disconnectFromCloud(cModule* node);
protected:
    virtual void initialize(int stage);
private:
    cModule* cloud;
    int currentId;
    int gateCloudInId;
    int gateCloudOutId;
};

}
#endif /* CONNECTION_H_ */

3 个答案:

答案 0 :(得分:3)

我猜您的班级Connection位于CloudBasedCSW C ++名称空间中。因此,在Connection.ned中,您应该将@class(Connection);更改为@class(CloudBasedCSW::Connection);

答案 1 :(得分:2)

我设法创建了一个新项目并运行它,没有出现此错误。所以,我将分享我的教程。

如何创建使用静脉的OMNeT ++项目。

  1. 创建omnet ++项目myproject文件 - &gt; new-&gt; OMNeT项目 - &gt;清空项目&#39; src&#39;和&#39;模拟&#39;文件夹
  2. 必须将静脉导入工作区才能使用它:Import-&gt;现有项目进入工作区 - &gt;
  3. 向项目添加静脉 - >属性 - >项目参考
  4. 将.ned和c ++ / h文件放在文件夹src
  5. 将omnetpp.ini和所有相扑配置文件放在文件夹模拟中
  6. 创建运行配置模拟,使用工作目录myproject / simulations和Simulation-&gt; Executable-&gt;其他:使用来自/ myproject / src / myproject的exe文件
  7. 备注:不要在c ++文件中使用与.ned文件相对应的命名空间,因为找不到c ++文件中的类( 网络设置期间模块(cCompoundModule)CloudVehicleScenarioMessage(id = 1)中的错误:Class&#34; vehicle&#34;找不到)。

    例如,您有vehicle.ned和vehicle.cc。 vehicle.cc 包括一个mynamespace :: vehicle类。 vehicle.ned不知道车辆位于命名空间mynamespace下面。只有通过@class(mynamespace :: vehicle)在ned文件中定义了一个类,才能找到它。

答案 2 :(得分:0)

更正此错误的简便方法是将.cc或所有c ++文件复制到静脉/ src /文件夹中。使用此技术,编译器会识别出您的类。