2016-07-15 4 views
1

inetから単純なモジュールを拡張しようとすると、 "再宣言されました"や "クラスが登録されていませんでした。モジュールをinet.srcディレクトリの外に拡張することも可能ですか?inetから簡単なモジュールを拡張するには?

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); 
} 

答えて

0

はい、INETディレクトリ外のプロジェクトを作成することができるがMyMac.ned。あなたは必要があります。

  1. は、そのプロパティに移動し、Project Referencesとしてinetプロジェクトを選択し、新しいOMNeT++プロジェクトを作成します。
  2. ファイルMyMac.nedMyMac.h、およびMyMac.ccを新しいプロジェクトに移動します。
  3. あなたC++ファイルを変更します。コードは内部の名前空間inetにする必要があり、すべての継承された純粋仮想メソッドは、あなたのコードでオーバーライドする必要があり、INET_APIを除去することができます。
  4. NEDファイルでは、C++クラスの名前空間を追加します。

修正されたコード:
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:MyMac.ned

#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 

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); 
} 
+0

感謝。 MyMac.ccでは、まだ2つのエラーが発生します。 Define_Module(MyMac); // 'inim :: MyMac :: MyMac' 'dllimport'属性なしで再宣言されました:以前の 'dllimport'は無視されました[-Winconsistent-dllimport]と未定義のリファレンスは '_imp___ZTIN4inet5MyMacE 'への未定義の参照です。 '_imp___ZTVN4inet5MyMacE ' –

+0

クラス宣言から' INET_API'を削除し、 'NED'ファイルのクラスに名前空間を追加して、プロジェクトをきれいにして再構築します。 –

関連する問題