0

我正在编写基于 Vulkan 的渲染器,但不幸的是出现了这个错误: 'Azazel::Instance::~Instance':无法访问在类'Azazel::Instance'中声明的私有成员 这让我很头疼。我试图在我的命名空间开始时预先声明 Azazel_Menager 类,但它不起作用,所以我改变了:

friend class Azazel_Menager;

至:

friend class Azazel::Azazel_Menager;

好吧,它也没有成功。所以在这里我请求你的帮助。也许你会看到我没有看到的东西。

Azazel_Menager:

#pragma once
#include "Engine/Core/UsingTypes.h"
namespace Azazel
{
    class Instance;
    class PhysicalDevice;

    class Azazel_Menager
    {
    public:
        static void CreateInstance();
        static void RetrieveAndSetPhysicalDevice();
    private:
        static Ref<Instance> s_Instance;
        static Ref<PhysicalDevice> s_PhysicalDevice;
    };
}

实例.h:

#pragma once
#include <vector>
#include <VulkanSDK/include/vulkan/vulkan.hpp>
namespace Azazel
{
    class Azazel_Menager;
    class Instance
    {
        friend class Azazel::Azazel_Menager;
    private:
        Instance();
        ~Instance();
    public:
        vk::UniqueInstance m_Instance;
        VkDebugUtilsMessengerEXT m_callback;
    };
}

参考 = std::shared_ptr

4

1 回答 1

1

您可能在外部使用构造函数/析构函数Azazel_Menager(如 instd::make_shared或 default Deleter)。

您必须仅在 中使用它们Azazel_Menager,如:

void Azazel_Menager::CreateInstance()
{
    s_Instance = std::shared_ptr<Azazel::Instance>{new Azazel::Instance{},
                                                   [](auto* p){ delete p; }};
}

演示

于 2022-01-19T10:46:12.177 回答