std::vector<std::unique_ptr<UnimplementType>> 编译错误

use*_*462 1 c++ memory smart-pointers

我的代码出现错误。\n我在类 <RenderPass> 中使用前向声明,std::unique_ptr<RenderPass> 工作良好。但是 std::vector<std::unique_ptr<RenderPass>> 会导致编译错误。\n以前有人遇到过这种情况吗?谢谢\xef\xbc\x81

\n
class RenderPass;\n\nclass RenderSystem final\n{\npublic:\n    RenderSystem() = default;\n    ~RenderSystem();\n\nprivate:\n    std::unique_ptr<RenderPass> c {} // work;\n    std::vector<std::unique_ptr<RenderPass>> m_render_passes {} // compile error:  error C2338: static_assert failed: 'can't delete an incomplete type';\n
Run Code Online (Sandbox Code Playgroud)\n

Som*_*ude 7

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

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

因此类定义将如下所示:

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
};

Run Code Online (Sandbox Code Playgroud)

在源文件中:

#include "header_file_for_renderpass.h"

RenderSystem::RenderSystem()
    : m_render_passes {}
{
}
Run Code Online (Sandbox Code Playgroud)