2015-11-07 60 views
1

我讀過類似的問題,但沒有人知道爲什麼,如果我有一個結構初始化一個C++的std ::結構的陣列中的C++ 11

struct ArabicRoman { 
    char roman; 
    int arabic; 
}; 

我可以初始化一個C中++ std::array方式如下:

ArabicRoman M({'M', 1000}); 
ArabicRoman D({'D', 500}); 
array<ArabicRoman, 2> const SYMBOLS({ M, D }); 

我可以通過以下方式初始化C風格數組:

ArabicRoman const SYMBOLS[]({ {'M', 1000}, {'D', 500} }); 

然而,以下是不編譯:

array<ArabicRoman, 2> const SYMBOLS({ {'M', 1000}, {'D', 500} }); 

任何解決方法來初始化C++風格的結構數組?

+4

你需要更多的支撐。 – 101010

回答

3

您需要使用括號來替換括號:

std::array<ArabicRoman, 2> const SYMBOLS {{ {'M', 1000}, {'D', 500} }}; 
             ^      ^

LIVE DEMO

+0

謝謝!我現在在參考文獻http://en.cppreference.com/w/cpp/container/array中看到,這種雙括號初始化的樣式是C++ 11語法,並且在C++ 14中不再需要 – stivlo

+0

@stilvo確實,在簡單的情況下你不需要雙括號,但是嵌套的括號很難避免... –