我想初始化一個二維std ::數組槽初始化器列表但編譯器告訴我,有太多的初始化器。你如何初始化(通過初始化列表)在C + + 11中的多維std ::數組?
例如爲:
std::array<std::array<int, 2>, 2> shape = { {1, 1},
{1, 1} };
編譯器錯誤:錯誤:‘std::array<std::array<int, 2ul>, 2ul>’
但顯然太多的初始化不會有太多。難道我做錯了什麼?
我想初始化一個二維std ::數組槽初始化器列表但編譯器告訴我,有太多的初始化器。你如何初始化(通過初始化列表)在C + + 11中的多維std ::數組?
例如爲:
std::array<std::array<int, 2>, 2> shape = { {1, 1},
{1, 1} };
編譯器錯誤:錯誤:‘std::array<std::array<int, 2ul>, 2ul>’
但顯然太多的初始化不會有太多。難道我做錯了什麼?
嘗試添加多一個對{}
,以確保我們初始化內部C數組。
std::array<std::array<int, 2>, 2> shape = {{ {1, 1},
{1, 1} }};
或者只是放下所有的括號。
std::array<std::array<int, 2>, 2> shape = { 1, 1,
1, 1 };
我建議(甚至沒有試圖擁有它,所以我可能是錯的)
typedef std::array<int, 2> row;
std::array<row,2> shape = { row {1,1}, row {1,1} };
它的工作原理,但我想知道爲什麼我的版本不。這兩種表情看起來都相同。 – 2012-02-29 19:25:14
@zoopp:不,他們沒有。巴西爾使用明確的結構,而你不這樣做。 – 2012-03-08 13:30:35
我明白了......感謝您的澄清。 – 2012-03-13 18:56:10
它總是覺得我們必須這樣做纔是抽象的泄漏。只是因爲圖書館不是「內在」的語言,而是建立了它,我想。 – 2012-03-08 13:30:51
剛剛嘗試過,如果你不需要警告,'std :: array,2> shape = {{{1,1}},{{1,1}}}};'。 EWW –
Jeff
2012-09-29 03:37:47