2
#include <array>
#include <algorithm>
template<typename Type, unsigned int ArraySize>
class Vector
{
public:
std::array<Type, ArraySize> arr;
Vector(){ std::fill(arr.begin(), arr.end(), 0); }
Vector(const std::array<Type, ArraySize>& input) : arr(input){}
};
#include <iostream>
int main()
{
Vector<double, 4> a2{{1, 2, 3, 4}};
std::cout << a2.arr[0];
std::cout << a2.arr[1];
std::cout << a2.arr[2];
std::cout << a2.arr[3];
}
此代碼符合在調試精在Visual Studio 2013和釋放模式,但智能感知給出了這樣的錯誤,當我編譯:Initilizer列表接受一個std ::陣列
智能感知:無構造函數的實例 「CHL ::矢量::向量與類型=雙,ARRAYSIZE = 4U]」 匹配 參數列表 參數類型有:({...})
我的問題是這樣的C++中有效的代碼?如果是這樣,我怎麼能阻止IntelliSense污染我的錯誤列表與此錯誤。
你不應該需要雙括號,除非我是啞巴,在這種情況下,我可以提供大括號的最真實數量是三個:一個是'VECTOR',一個'array',以及一個用於array中的數組。雖然Brace elision被允許發生。 – chris
如果我刪除雙大括號然後我得到這個錯誤'錯誤C2440:'初始化':不能從'初始化列表'轉換爲'矢量''。爲了解決這個問題,我可以把它放在圓括號內,但intellisense仍然會給出同樣的錯誤。 –
Caesar
三對呢?而且看起來只有一對被允許被取消。我並不太熟悉大括號規則的工作原理。 – chris