我创建了我的第一个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_ */
答案 0 :(得分:3)
我猜您的班级Connection
位于CloudBasedCSW
C ++名称空间中。因此,在Connection.ned
中,您应该将@class(Connection);
更改为@class(CloudBasedCSW::Connection);
。
答案 1 :(得分:2)
我设法创建了一个新项目并运行它,没有出现此错误。所以,我将分享我的教程。
如何创建使用静脉的OMNeT ++项目。
备注:不要在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 /文件夹中。使用此技术,编译器会识别出您的类。