1
当我尝试从inet扩展一个简单的模块时,出现很多类似“重新声明”和“类未注册”的错误。是否有可能在inet.src目录之外扩展模块?如何从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);
}
感谢。在MyMac.cc中,我仍然得到2个错误: Define_Module(MyMac); //未定义对'_imp___ZTIN4inet5MyMacE'的引用“” MyMac :: MyMac(){//'inet :: MyMac :: MyMac'重新声明时没有'dllimport'属性:之前的'dllimport'被忽略[-Winconsistent-dllimport]和未定义的引用'_imp___ZTVN4inet5MyMacE' –
从类声明中删除'INET_API',并在'NED'文件中的一个类中添加一个名称空间,然后清理并重建你的项目,我已经更新了我的答案。 –