我在Inet 4上使用OMNeT 5.4.1并尝试编写扩展了inet :: ApplicationBase类的应用程序,我在Windows 10上。
错误消息:
../out/clang-debug/src/test/DiceApplication.o:(.rdata+0x670): undefined reference to `typeinfo for inet::ApplicationBase'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
这是我的代码:
DiceApplication.h:
#ifndef TEST_DICEAPPLICATION_H_
#define TEST_DICEAPPLICATION_H_
#include <inet/applications/base/ApplicationBase.h>
namespace inet {
class DiceApplication : public ApplicationBase {
public:
DiceApplication();
virtual ~DiceApplication();
protected:
virtual bool handleOperationStage(LifecycleOperation *operation, int stage, IDoneCallback *doneCallback) override;
virtual void handleMessageWhenUp(cMessage *msg) override;
};
} // namespace inet
#endif /* TEST_DICEAPPLICATION_H_ */
DiceApplication.cc:
#include "DiceApplication.h"
namespace inet {
Define_Module(DiceApplication);
DiceApplication::DiceApplication() {
// TODO Auto-generated constructor stub
}
DiceApplication::~DiceApplication() {
// TODO Auto-generated destructor stub
}
bool DiceApplication::handleOperationStage(LifecycleOperation *operation, int stage, IDoneCallback *doneCallback)
{
return true;
}
void DiceApplication::handleMessageWhenUp(cMessage *msg) {
return;
}
} // namespace inet
DiceApplication.ned:
package test;
import inet.applications.contract.IApp;
simple DiceApplication like IApp
{
parameters:
@class(inet::DiceApplication);
}
头文件ApplicationBase.h
#ifndef __INET_APPLICATIONBASE_H
#define __INET_APPLICATIONBASE_H
#include "inet/common/lifecycle/OperationalBase.h"
#include "inet/common/lifecycle/NodeOperations.h"
namespace inet {
class INET_API ApplicationBase : public OperationalBase
{
public:
ApplicationBase();
protected:
virtual bool isInitializeStage(int stage) override { return stage == INITSTAGE_APPLICATION_LAYER; }
virtual bool isNodeStartStage(int stage) override { return stage == NodeStartOperation::STAGE_APPLICATION_LAYER; }
virtual bool isNodeShutdownStage(int stage) override { return stage == NodeShutdownOperation::STAGE_APPLICATION_LAYER; }
};
} // namespace inet
#endif // ifndef __INET_APPLICATIONBASE_H
我已经对此主题进行了研究,并阅读了大多数相关主题。导致此错误的典型原因是基类中的虚拟方法未定义或未声明为纯虚拟方法。但是我在基类ApplicationBase甚至基类中都找不到它们。
也许有人可以帮助我弄清楚,怎么了。
谢谢你,最好的问候。