如何从inet扩展一个简单的模块? [英] How to extend a simple module from inet?
本文介绍了如何从inet扩展一个简单的模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我尝试从 inet 扩展一个简单模块时,我收到很多错误,例如重新声明"和类未注册".甚至可以在 inet.src 目录之外扩展模块吗?
I get lots of errors like "redeclared" and "class wasn't registered" when I try to extend a simple module from inet. Is it even possible to extend modules outside the inet.src directory?
MyMac.ned
package myproject.linklayer;
import inet.linklayer.contract.IMACProtocol;
import inet.linklayer.base.MACProtocolBase;
simple MyMac extends MACProtocolBase like IMACProtocol
{
parameters:
@display("i=block/rxtx");
@class(MyMac);
}
MyMac.h
#ifndef __INET_MYMAC_H
#define __INET_MYMAC_H
#include "inet/linklayer/base/MACProtocolBase.h"
#include "inet/linklayer/contract/IMACProtocol.h"
using namespace inet;
namespace inet { } // namespace inet
class INET_API MyMac : public MACProtocolBase, public IMACProtocol
{
public:
MyMac();
virtual ~MyMac();
virtual void initialize(int stage) override;
};
#endif /* __INET_MYMAC_H */
MyMac.cc
#include "MyMac.h"
using namespace inet;
namespace inet {} // namespace inet
Define_Module(MyMac);
MyMac::MyMac() {}
MyMac::~MyMac() {}
void MyMac::initialize(int stage)
{
MACProtocolBase::initialize(stage);
}
推荐答案
是的,可以在 INET
目录之外准备项目.你应该:
Yes, it is possible to prepare a project outside INET
directory. You should:
- 创建一个新的
OMNeT++
项目,然后转到其属性并选择inet
项目作为Project References
. - 将您的文件
MyMac.ned
、MyMac.h
和MyMac.cc
移动到新项目中. - 修改你的
C++
文件:代码必须在 inside 命名空间inet
,所有继承的纯虚方法必须在你的代码,INET_API
可能会被删除. - 在
NED
文件中为 C++ 类添加命名空间.
- Create a new
OMNeT++
project, then go to its properties and selectinet
project asProject References
. - Move your files
MyMac.ned
,MyMac.h
, andMyMac.cc
into the new project. - Modify your
C++
files: the code has to be inside the namespaceinet
, all inherited pure virtual methods have to be overridden in your code,INET_API
may be removed. - In
NED
file add a namespace for the C++ class.
更正的代码:
MyMac.h:
Corrected code:
MyMac.h:
#ifndef __INET_MYMAC_H
#define __INET_MYMAC_H
#include "inet/linklayer/base/MACProtocolBase.h"
#include "inet/linklayer/contract/IMACProtocol.h"
namespace inet {
class MyMac : public MACProtocolBase, public IMACProtocol
{
public:
MyMac();
virtual ~MyMac();
virtual void initialize(int stage) override;
protected:
virtual void handleUpperPacket(cPacket *packet) override ;
virtual void handleLowerPacket(cPacket *packet) override;
virtual bool isUpperMessage(cMessage *message) override;
virtual bool isLowerMessage(cMessage *message) override ;
virtual InterfaceEntry *createInterfaceEntry() override;
};
} // namespace inet
#endif /* __INET_MYMAC_H */
MyMac.cc:
#include "MyMac.h"
namespace inet {
Define_Module(MyMac);
MyMac::MyMac() {
}
MyMac::~MyMac() {
}
void MyMac::initialize(int stage) {
MACProtocolBase::initialize(stage);
}
void MyMac::handleUpperPacket(cPacket *packet) {
}
void MyMac::handleLowerPacket(cPacket *packet) {
}
bool MyMac::isUpperMessage(cMessage *message) {
}
bool MyMac::isLowerMessage(cMessage *message) {
}
InterfaceEntry *MyMac::createInterfaceEntry() {
}
} // namespace inet
MyMac.ned:
package myproject.linklayer;
import inet.linklayer.contract.IMACProtocol;
import inet.linklayer.base.MACProtocolBase;
simple MyMac extends MACProtocolBase like IMACProtocol
{
parameters:
@display("i=block/rxtx");
@class(inet::MyMac);
}
这篇关于如何从inet扩展一个简单的模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文