繁体   English   中英

std::向量<std::unique_ptr<unimplementtype> > 编译错误</std::unique_ptr<unimplementtype>

[英]std::vector<std::unique_ptr<UnimplementType>> compile error

我的代码有问题。 我在我的 class <RenderPass> 中使用前向声明,std::unique_ptr<RenderPass> 运行良好。 但是 std::vector<std::unique_ptr<RenderPass>> 导致编译错误。 有没有人遇到过这种情况? 谢谢!

class RenderPass;

class RenderSystem final
{
public:
    RenderSystem() = default;
    ~RenderSystem();

private:
    std::unique_ptr<RenderPass> c {} // work;
    std::vector<std::unique_ptr<RenderPass>> m_render_passes {} // compile error:  error C2338: static_assert failed: 'can't delete an incomplete type';

这是因为您对向量进行了内联初始化。 这需要元素类型的完整定义。

如果您在具有RenderPass完整定义的源文件中定义RenderSystem构造函数,则可以使用其初始化列表来初始化向量。

因此 class 的定义将改为:

class RenderPass;

class RenderSystem final
{
public:
    RenderSystem();
    ~RenderSystem();

private:
    // Note: No inline initialization of the vector
    std::vector<std::unique_ptr<RenderPass>> m_render_passes
};

在源文件中:

#include "header_file_for_renderpass.h"

RenderSystem::RenderSystem()
    : m_render_passes {}
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM