簡體   English   中英

當我將結構放入聯合中時沒有可用的默認構造函數,但如果它在外面則沒有錯誤

[英]No default constructor available when I put a struct in an union, but no errors if it is outside

我正在嘗試將 RenderTargetView 放入下面定義的聯合中。

但是當我嘗試這樣做時,我得到了沒有可用的默認構造函數的錯誤。 我確信應該有默認構造函數,因為一切都已定義。

此外,如果我將 RenderTargetView 放在聯合之外,我將不再收到該錯誤。 有誰知道這里發生了什么?

錯誤信息:

GP::Private::ResourceView::ResourceView(void)':試圖引用已刪除的 function Function 被隱式刪除,因為 'GP::Private::ResourceView' 有一個變體數據成員 'GP:::Private::Resource RTView' 具有非平凡的默認構造函數

struct RenderTargetView
{
    static constexpr uint32_t INVALID_INDEX = static_cast<uint32_t>(-1);
    uint32_t Index = INVALID_INDEX;
};

struct FailingStruct
{
    union
    {
        RenderTargetView RTView;
    };
};

僅當聯合的所有成員都具有普通構造函數時,聯合才具有默認的未刪除構造函數。 析構函數也一樣。 由於您的結構有一個成員初始化程序,這意味着它沒有一個普通的構造函數,這意味着聯合構造函數被刪除。 您需要為工會創建特殊成員,並將其委派給活動成員。

或者更好的是使用為您創建所有這些的std:: variant

至於為什么它很簡單:聯合不知道哪個成員處於活動狀態,因此它無法調用適當的構造函數/析構函數。

暫無
暫無

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

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