2015-11-07 46 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确实,在简单的情况下你不需要双括号,但是嵌套的括号很难避免... –