如何解决转发声明和unique_ptr
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
}
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,
还有:
note: in instantiation of member function 'std::default_delete<FwdClass>::operator()' requested here
get_deleter()(std::move(__ptr));
我不能包含FwdClass.h,因为FwdClass.cpp需要包含DerivedHandler.h,并且为了避免循环依赖,我创建了接口类Handler.h并转发了decl。使用原始指针效果很好,但是使用unique_ptr的barfs。
编辑:(更多详细信息)
FwdClass.cpp实现包含DerivedHandler.h,所以我不能包含FwdClass标头DerivedHandler.h,因为它导致循环依赖。 因此,我正在做前向声明。 前向声明适用于原始ptrs,但不适用于唯一的ptrs。
我制作了一个DerivedHandler.cpp并包含了FwdClass.h,但这仍然无济于事。
我不认为这是一个重复的问题,特别是没有循环依赖的细微差别。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。