簡體   English   中英

數組初始化拋出編譯器錯誤

[英]Array initialization throwing a compiler error

我正在嘗試根據可變參數模板的長度初始化一個std::array 我的代碼發布在下面,我希望數組包含int s,並有足夠的空間容納每個傳入Types的參數一個int

sizeof...()運算符應該做我想做的,如果我沒記錯的話,所以我認為下面的代碼是有效的。

#include <iostream>
#include <vector>


template<typename Type, typename ...Types>
class Object{
    public:
        std::array<int, sizeof...(Types)> loadedValues;
};



int main(){
    auto k = new Object<int, float, int, int>();
}

但是,我遇到了一個神秘的編譯器錯誤:

error: ‘Object<Type, Types>::values’ has incomplete type
std::array<int, sizeof...(Types)> values;

(海灣合作委員會 12)

我對元編程還比較陌生,所以它可能只是我的代碼中的一個我沒有發現的錯誤,但如果有人能提供有關編譯失敗原因的見解,那將不勝感激!

忘記包含 header array將導致不完整的類型錯誤。 雖然GCC 12.2發出警告:

<source>:1:1: note: 'std::array' is defined in header '<array>'; did you forget to '#include <array>'?
  +++ |+#include <array>

如此處 Godbolt 所示: https://godbolt.org/z/6nfTTKre ,但是,如果有許多模板(我的情況),並且有一長串錯誤/警告,這可能會變得模糊或更難找到,或取決於您的設置。

我在檢查 Godbolt 之前寫了這個問題,它很快就揭示了錯誤,所以我認為如果有人遇到類似的錯誤,問答式的問題是合適的。

暫無
暫無

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

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