问题描述
我有以下代码。
Handler.h
class FwdClass;
class Handler {
public:
virtual std::unique_ptr<FwdClass> getFwdClass() noexcept {
return nullptr;
}
virtual ~Handler() {
}
};
DerivedHandler.h
#include "Handler.h"
class DerivedHandler: public Handler {
explicit DerivedHandler() { // error here
}
std::unique_ptr<FwdClass> getFwdClass () noexcept override {
return std::unique_ptr<FwdClass>(std::move(p));
}
std::unique_ptr<FwdClass> p;
}
我看到以下编译错误:
**error:** invalid application of 'sizeof' to an incomplete type 'FwdClass'
static_assert(sizeof(_Tp)>0,and also:
note: in instantiation of member function 'std::default_delete<FwdClass>::operator()' requested here
get_deleter()(std::move(__ptr));
如何解决这些问题?我试图用定义的getFwdClass /默认析构函数并包含FwdClass.h来制作DerivedHandler.cpp文件,但这无济于事。
(更多详细信息)
FwdClass.cpp实现包含DerivedHandler.h,所以我不能包含FwdClass标头DerivedHandler.h,因为它导致循环依赖。这就是为什么我要进行前向声明和接口类Handler.h。前向声明适用于原始ptrs,但不适用于唯一的ptrs。
我不认为这是一个重复的问题,特别是没有循环依赖的细微差别。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)