Omnet++ OMNeT++;链接INET的问题

Omnet++ OMNeT++;链接INET的问题,omnet++,inet,Omnet++,Inet,在构建新的OMNeT++项目的过程中,我遇到了以下错误: out/clang debug//myUdp.o:(.rdata[\u ZTI5myUdp]+0x10):未定义对“inet::ApplicationBase的类型信息”的引用。 我已经配置了INETreference(选中项目“myUdp”->Properties->Project reference->INET复选框) 这是INET Makemake配置:和 这是我的项目(myUdp)的Makemake配置:和 < P> 和C++代码

在构建新的
OMNeT++
项目的过程中,我遇到了以下错误:

out/clang debug//myUdp.o:(.rdata[\u ZTI5myUdp]+0x10):未定义对“inet::ApplicationBase的类型信息”的引用。

我已经配置了
INET
reference(选中项目“myUdp”->Properties->Project reference->INET复选框)

这是INET Makemake配置:

这是我的项目(myUdp)的Makemake配置:

< P> <强>和C++代码:< /强>

MyUdp.cc

#include <inet/applications/udpapp/UDPBasicApp.h>
class myUdp: public inet::UDPBasicApp {
};
Define_Module(myUdp);

有人能帮我解决这个错误吗?

这可能是因为UDPBasicApp的方法被定义为
virtual

比较GCC关于“模糊链接”的信息,例如本部分:

类型信息
对象

C++需要写出有关类型的信息,以便 实现
dynamic\u cast
typeid
和异常处理。对于 多态类(具有
虚拟
功能的类),
类型信息
对象与vtable一起写入,以便
动态\u cast
可以 确定运行时类对象的动态类型。总的来说 其他类型,我们在使用时写出
type\u info
对象:when 将
typeid
应用于表达式、抛出对象或引用 catch子句或异常规范中的类型


您需要在基类(UDPBasicApp)中提供虚拟函数的定义,或者声明它们为纯函数,因为编译器(在您的例子中是GCC或Clang)正在尝试确定转换单元的正确方法(然后在其中创建vtable和typeinfo对象)这可能是因为UDPBasicApp的方法被定义为
virtual

比较GCC关于“模糊链接”的信息,例如本部分:

类型信息
对象

C++需要写出有关类型的信息,以便 实现
dynamic\u cast
typeid
和异常处理。对于 多态类(具有
虚拟
功能的类),
类型信息
对象与vtable一起写入,以便
动态\u cast
可以 确定运行时类对象的动态类型。总的来说 其他类型,我们在使用时写出
type\u info
对象:when 将
typeid
应用于表达式、抛出对象或引用 catch子句或异常规范中的类型


您需要在基类(UDPBasicApp)中提供虚拟函数的定义,或者声明它们为纯函数,因为编译器(在您的例子中是GCC或Clang)正在尝试确定转换单元的正确方法(然后在其中创建vtable和typeinfo对象)显然,它无法正确判断。

谢谢您的回答。然而,我刚刚意识到我在最初的帖子中提到了不同的错误。我实际上试图解决的错误是
“未定义对inet::ApplicationBase的typeinfo的引用”
。所以我的问题是,我应该在自己的类中声明ApplicationBase类中的所有函数吗?为什么不
扩展ApplicationBase
?我的回答中的信息仍然有效,请看一下
UDPBasicApp
的实现,它扩展了
ApplicationBase
类并实现了纯虚拟函数。感谢您的回答。然而,我刚刚意识到我在最初的帖子中提到了不同的错误。我实际上试图解决的错误是
“未定义对inet::ApplicationBase的typeinfo的引用”
。所以我的问题是,我应该在自己的类中声明ApplicationBase类中的所有函数吗?为什么不
扩展ApplicationBase
?我的回答中的信息仍然有效,看看
UDPBasicApp
的实现,它扩展了
ApplicationBase
类并实现了纯虚拟函数。
import inet.applications.udpapp.UDPBasicApp;
simple myUdp extends UDPBasicApp {
    @class(myUdp);
}