2016-07-15 6 views
1

Ich bekomme viele Fehler wie "redeclared" und "Klasse wurde nicht registriert", wenn ich versuche, ein einfaches Modul von inet zu erweitern. Ist es überhaupt möglich, Module außerhalb des Verzeichnisses inet.src zu erweitern?Wie erweitert man ein einfaches Modul von 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(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); 
} 

Antwort

0

Ja, es ist möglich, ein Projekt außerhalb INET Verzeichnis vorzubereiten. Sie sollten:

  1. Erstellen Sie ein neues Projekt OMNeT++, dann, um seine Eigenschaften gehen und inet Projekt als Project References wählen.
  2. Verschieben Sie Ihre Dateien , MyMac.h und MyMac.cc in das neue Projekt.
  3. Ändern Sie bitte Ihre C++ Dateien: Der Code hat innerhalb der Namespace inet alle vererbten rein virtuelle Methoden in Ihrem Code außer Kraft gesetzt werden müssen, ist, entfernt werden INET_API kann.
  4. In NED Datei einen Namespace für die C++ - Klasse hinzufügen.

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

Dank. In MyMac.cc bekomme ich noch 2 Fehler: Define_Module (MyMac); // undefinierter Verweis auf '_imp___ZTIN4inet5MyMacE '" MyMac :: MyMac() {//' inet :: MyMac :: MyMac 'redeclared ohne Attribut' dllimport ': vorheriger' dllimport 'ignoriert [-Winconsistent-dllimport] und undefinierter Verweis auf '_imp___ZTVN4inet5MyMacE ' –

+0

Entfernen Sie' INET_API' aus der Klassendeklaration und fügen Sie einen Namespace in eine Klasse in 'NED' Datei ein, säubern und rekonstruieren Sie Ihr Projekt. Ich habe meine Antwort aktualisiert. –

Verwandte Themen