簡體   English   中英

我收到重言式編譯器錯誤。 我應該如何修復“類型“X”的參數與類型“X”的參數不兼容?

[英]I'm getting tautological compiler errors. How am I supposed to fix “argument of type ”X“ is incompatible with parameter of type ”X"?

在我的案例中的具體細節:我正在使用 MSVC 和AMD 的 vulkan memory 分配器,這是一個 stb 樣式的單個 header 文件。 (所以你把它包括在你的項目中,比如:

#define VMA_IMPLEMENTATION
#include "vk_mem_alloc.h"

在單個編譯單元中編譯它,並且只是

#include "vk_mem_alloc.h"

在任何需要使用它的文件中。)

無論如何:

我得到的具體錯誤的一些例子是:

“VmaDeviceMemoryBlock *”類型的參數與“VmaDeviceMemoryBlock *”類型的參數不兼容

“VmaSuballocationType”類型的值不能分配給“VmaSuballocationType”類型的實體

聲明與“void VmaBlockMetadata::PrintDetailedMap_Allocation(VmaJsonWriter &json, VkDeviceSize offset, VmaAllocation hAllocation) const”不兼容

當定義是

void VmaBlockMetadata::PrintDetailedMap_Allocation(class VmaJsonWriter& json,
    VkDeviceSize offset,
    VmaAllocation hAllocation) const

這些錯誤,以及許多其他沒有明顯損壞的錯誤,絕對會亂扔文件。 更奇怪的是,我可以構建程序,它可以毫無問題地編譯和運行。 它用這種噪音填充我的錯誤 window 完全破壞了錯誤窗口的有用性。 我現在在我的代碼中也遇到了其他奇怪的錯誤,我不確定如何繼續。

我使用 Visual Studio 2019 得到了完全相同的一組錯誤。在我的情況下,錯誤是使用帶有隱式強制轉換的統一初始化。

我需要改變

uint32_t uniformOffset{ pad_uniform_buffer_size(sizeof(GPUSceneData)) * frameIndex };

uint32_t uniformOffset{ static_cast<uint32_t>(pad_uniform_buffer_size(sizeof(GPUSceneData)) * frameIndex) };

因為 pad_uniform_buffer_size 返回size_t並且我試圖通過統一初始化將其隱式轉換為uint32_t

我不知道為什么該錯誤會在該 vma 文件中表現出來,但這是我的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM