繁体   English   中英

在结构中使用Vulkan唯一句柄会导致“隐式删除”错误

[英]Using Vulkan unique handle in struct leads to “implicitly deleted” error

我的代码中有这个:

struct Buffer
        {
            vk::UniqueBuffer buffer;
            vk::UniqueDeviceMemory memory;
            unsigned int top{0};
        };

        struct Image
        {
            vk::UniqueImage textureImage;
            vk::UniqueDeviceMemory textureImageMemory;
        };

        struct Texture
        {
            Image image;
            vk::UniqueImageView imageView;
            vk::UniqueSampler sampler;
        };

        struct SwapChainFrame
        {
            vk::Image image;
            vk::UniqueImageView imageView;
            vk::UniqueFramebuffer frameBuffer;
            vk::UniqueCommandBuffer commandBuffer;
            Buffer uniformVpMatrix;
            vk::UniqueDescriptorSet descriptorSet;
        };

在添加图像和纹理之前,在Vulkan中存储唯一的手柄效果很好。 现在我得到这个:

   In file included from .../gpuVulkan.h:50:16: note: ‘GpuVulkan::Texture::Texture(const GpuVulkan::Texture&)’ is implicitly deleted because the default definition would be ill-formed:
             struct Texture
                    ^~~~~~~
    .../gpuVulkan.h:50:16: error: use of deleted function ‘GpuVulkan::Image::Image(const GpuVulkan::Image&)’
    .../gpuVulkan.h:44:16: note: ‘GpuVulkan::Image::Image(const GpuVulkan::Image&)’ is implicitly deleted because the default definition would be ill-formed:
             struct Image
                    ^~~~~
    .../gpuVulkan.h:44:16: error: use of deleted function ‘vk::UniqueHandle<Type, Dispatch>::UniqueHandle(const vk::UniqueHandle<Type, Dispatch>&) [with Type = vk::Image; Dispatch = vk::DispatchLoaderStatic]’
    In file included from .../gpuVulkan.h:1,
                     from .../src/gpuVulkan.cpp:5:
    /usr/include/vulkan/vulkan.hpp:392:5: note: declared here
         UniqueHandle( UniqueHandle const& ) = delete;
         ^~~~~~~~~~~~
    In file included from ...gpuVulkan.cpp:5:
    .../gpuVulkan.h:44:16: error: use of deleted function ‘vk::UniqueHandle<Type, Dispatch>::UniqueHandle(const vk::UniqueHandle<Type, Dispatch>&) [with Type = vk::DeviceMemory; Dispatch = vk::DispatchLoaderStatic]’
             struct Image

任何想法有什么问题吗? Buffer和SwapChainFrame效果很好。 似乎在这里报告了类似的问题,但是我不确定这是否是相同的问题。 任何帮助将非常感激! 谢谢

您的Image类没有副本构造函数(因为vk::UniqueImage没有副本构造函数)。 这意味着Texture也没有副本构造函数。

其他类也没有复制构造函数,但是除非您尝试复制它们,否则都可以。 (在这种情况下,根据注释,通过创建std::vector<Texture> 。)

暂无
暂无

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

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