invalid new-expression of abstract class type。

发布时间:2026/7/18 20:36:32

invalid new-expression of abstract class type。 报错信息:In file includedfrom ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/searchtaskinfo.h:5,from ../../../include/bpf_include/../../interface/modules/iglobaldatamanager.h:9,from ../../../src/Components/GlobalDataManagerModule/globaldatamanager.h:4,from ../../../src/Components/GlobalDataManagerModule/globaldatamanager.cpp:1:../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h:In function ‘WaveType getWaveType(int)’: ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h:12:39:warning: unused parameter ‘tn’ [-Wunused-parameter] 12 | inline WaveType getWaveType(const int tn) | ~~~~~~~~~~^~In file includedfrom ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/searchtaskinfo.h:5, from ../../../include/bpf_include/../../interface/modules/iglobaldatamanager.h:9,from ../../../src/Components/GlobalDataManagerModule/globaldatamanager.h:4,from ../../../src/Components/GlobalDataManagerModule/globaldatamanagermodule.cpp:4: ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h:In function ‘WaveType getWaveType(int)’:../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h:12:39:warning: unused parameter ‘tn’ [-Wunused-parameter] 12 | inline WaveType getWaveType(const int tn) | ~~~~~~~~~~^~In file includedfrom ../../../include/bpf_include/BlueManager/module/modulemacro.h:17,from ../../../src/Components/GlobalDataManagerModule/globaldatamanagermodule.cpp:3: ../../../include/bpf_include/BlueManager/module/singletonobj.h:In instantiation of ‘static bpf::IBObject* bpf::SingletonObjectCls::create(long int, const char*) [with Cls GlobalDataManagerModule]’:../../../src/Components/GlobalDataManagerModule/globaldatamanagermodule.cpp:8:1:required from here ../../../include/bpf_include/BlueManager/module/singletonobj.h:59:39:error: invalid new-expression of abstract class type ‘bpf::SingletonObjectGlobalDataManagerModule’ 59 | SingletonObjectCls* p new SingletonObjectCls();| ^~~~~~~~~~~~~~~~~~~~~~~~~~../../../include/bpf_include/BlueManager/module/singletonobj.h:11:7: note: because the following virtual functions are pure within ‘bpf::SingletonObjectGlobalDataManagerModule’: 11 | class SingletonObject | ^~~~~~~~~~~~~~~In file included from ../../../src/Components/GlobalDataManagerModule/globaldatamanager.h:4, from ../../../src/Components/GlobalDataManagerModule/globaldatamanagermodule.cpp:4: ../../../include/bpf_include/../../interface/modules/iglobaldatamanager.h:342:30:note: ‘virtual SearchTaskInfo* IGlobalDataManagerModule::getSearchTaskInfo()’ 342 | virtual SearchTaskInfo * getSearchTaskInfo() 0; | ^~~~~~~~~~~~~~~~~In file included from ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/searchtaskinfo.h:5, from ../../../include/bpf_include/../../interface/modules/iglobaldatamanager.h:9, from ../../../src/Components/GlobalDataManagerModule/globaldatamanager.h:4, from moc_globaldatamanager.cpp:9: ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h: In function ‘WaveType getWaveType(int)’: ../../../src/Components/GlobalDataManagerModule/../../Public/MsgHandle/../../Public/MsgHandle/MsgType.h:12:39:warning: unused parameter ‘tn’ [-Wunused-parameter] 12 | inline WaveType getWaveType(const int tn) | ~~~~~~~~~~^~make: *** [Makefile:625: globaldatamanagermodule.o] Error 1 make: *** Waiting for unfinished jobs....09:29:15: 进程/usr/bin/make退出退出代码 2 。核心致命错误编译失败根源error: invalid new-expression of abstract class type ‘bpf::SingletonObjectGlobalDataManagerModule’ note: because the followingvirtual functionsarepurewithin … virtual SearchTaskInfo* IGlobalDataManagerModule::getSearchTaskInfo() 0;IGlobalDataManagerModule是抽象接口类包含纯虚函数virtual SearchTaskInfo* getSearchTaskInfo() 0;GlobalDataManagerModule继承了该接口但没有实现这个纯虚函数未实现纯虚函数 →GlobalDataManagerModule本身变成抽象类SingletonObjectCls::create()中执行new SingletonObjectCls()不能 new 抽象类直接编译报错。所有0的纯虚接口函数子类必须全部实现缺一不可0代表纯虚函数含义两点本类接口不提供函数实现所有非抽象子类必须重写并给出实现否则子类自动成为抽象类。C 硬性规定 只要一个类包含任意一个未实现的纯虚函数这个类就是抽象类。 抽象类有两条强制限制1.不能直接 new 创建对象GlobalDataManagerModule* obj new GlobalDataManagerModule(); // 编译报错2.不能作为值类型实例化、不能放入容器等。IGlobalDataManagerModule含纯虚getSearchTaskInfo()是抽象接口GlobalDataManagerModule : public IGlobalDataManagerModule继承接口但没写该函数的实现编译器检查父类纯虚函数在子类无重写实现 →GlobalDataManagerModule升级为抽象类模板SingletonObjectCls内部执行new SingletonObjectCls()需要实例化GlobalDataManagerModule抽象类禁止 new直接抛出报错invalid new-expression of abstract class type。不能对抽象类使用new创建实例。

相关新闻