转发声明和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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...