的OMNeT ++:网络设置期间中的错误模块:类未发现

问题描述 投票:1回答:3

我创造了我第一次的OMNeT ++ /静脉项目,但无法启动仿真。你能帮助我吗?

我想改变我的问题 - 有一个简单的方法来创建一个项目,类似于RSUExampleScenario脉,不是下静脉/例子/ MyFolder文件,但在一个单独的项目和工作区?而且我必须为它做什么步骤?

我想创建一个从脉类似RSUExampleScenario项目,但与其他方案,并使用其他的OMNeT ++模块。当我建立了我的项目下的静脉/例子/ MyFolder文件,并把我的新.ned文件下血管结构,它工作得很好。

现在,我创造了新的项目,其中包括与.ned和C ++ / h的文件的文件夹,文件夹一样连接(Connection.ned,Connection.cc,Connection.h,package.ned)和文件夹节点(CloudVehicleScenarioMessage.ned,Cloud.ned)和模拟夹cloudvehiclehi(omnetpp.ini)。

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

误差在模块(cCompoundModule)CloudVehicleScenarioMessage网络建立期间(ID = 1):类“连接”未发现 - 也许是其代码是未连接于,或类没有与Register_Class()注册,或在模块的情况下和信道,Define_Module()/ Define_Channel()。

我猜NED文件被加载,但在C ++文件中的类不能被发现,但我用Define_Module。云计算只是一个复合模块,没有任何自己的C ++编译器,它产生任何问题。连接是一个简单的模块,参照类Connection.cc,其中Define_Module()被调用,并且使错误而载入。我的所有文件夹,如节点或连接都包括在内,我能项目 - >属性 - >路径和Symbols->包括下看。

我已经尝试过重建的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_ */
eclipse-cdt omnet++
3个回答
3
投票

我猜你的类ConnectionCloudBasedCSW C ++命名空间。因此,在Connection.ned你应该改变@class(Connection);@class(CloudBasedCSW::Connection);


2
投票

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

如何创建的OMNeT ++项目,该项目采用静脉。

  1. 创建OMNET ++项目MyProject的文件 - >新建 - >的OMNeT项目 - >与“SRC”和“模拟”文件夹中的空项目
  2. 血脉必须导入到工作区才能使用它:导入 - >现有项目纳入workspace->
  3. 添加矿脉项目 - >属性 - >项目参考
  4. 把你的.ned和C ++ / h的文件夹中的SRC
  5. 放入文件夹模拟omnetpp.ini和相扑的所有配置文件
  6. 创建运行配置的模拟,用工作目录的myproject /模拟和仿真 - > Executable->其他:与exe文件从/ myproject的/ src目录/ myproject的

注:在你的C ++文件不使用的命名空间,对应于.ned文件,因为在C ++文件中的类就不会被发现(错误模块(cCompoundModule)网络安装过程中CloudVehicleScenarioMessage(ID = 1):类“车辆”不找到)。

例如,你已经vehicle.ned和vehicle.cc。 vehicle.cc包括类myNameSpace对象::车辆。 vehicle.ned不知道车辆所在的命名空间下myNameSpace对象。仅当一个类被在奈德文件经由@class(myNameSpace对象::车辆)中所定义,可以发现。


0
投票

一个简单的方法来纠正这个错误被复制的.cc或全部C ++文件到静脉/ src目录/文件夹。使用这种技术,你编译认出你的类。

© www.soinside.com 2019 - 2024. All rights reserved.