如何从inet扩展一个简单的模块? [英] How to extend a simple module from inet?

查看:71
本文介绍了如何从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:

  1. 创建一个新的 OMNeT++ 项目,然后转到其属性并选择 inet 项目作为 Project References.
  2. 将您的文件 MyMac.nedMyMac.hMyMac.cc 移动到新项目中.
  3. 修改你的 C++ 文件:代码必须在 inside 命名空间 inet,所有继承的纯虚方法必须在你的代码,INET_API 可能会被删除.
  4. NED 文件中为 C++ 类添加命名空间.
  1. Create a new OMNeT++ project, then go to its properties and select inet project as Project References.
  2. Move your files MyMac.ned, MyMac.h, and MyMac.cc into the new project.
  3. Modify your C++ files: the code has to be inside the namespace inet, all inherited pure virtual methods have to be overridden in your code, INET_API may be removed.
  4. 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆