我想用對象列表初始化向量或數組。它適用於載體中,但不適用於數組:爲什麼大括號初始化列表不適用於std :: array
struct Widget
{
string name;
vector<int> list;
};
struct Object
{
string name;
vector<int> list;
Object(string _name, vector<int> _list) : name(_name), list(_list) { }
};
int main()
{
const vector<Widget> vw = {
{"vw1", {1,2,3}},
{"vw2", {1,2,3}} };
const array<Widget,2> aw = {
{"aw1", {1,2,3}},
{"aw2", {1,2,3}} };
const vector<Object> vo = {
{"vo1", {1,2,3}},
{"vo2", {1,2,3}} };
const array<Object,2> ao = {
{"ao1", {1,2,3}},
{"ao2", {1,2,3}} };
return 0;
}
從鐺錯誤:
widget.cpp:36:9: error: excess elements in struct initializer
{"aw2", {1,2,3}} };
^~~~~~~~~~~~~~~~
widget.cpp:41:10: error: no viable conversion from 'const char [4]' to 'Object'
{"ao1", {1,2,3}},
^~~~~
widget.cpp:41:17: error: no matching constructor for initialization of 'Object'
{"ao1", {1,2,3}},
^~~~~~~
是什麼矢量和陣列之間的差異,這防止了陣列型從支持此語法?
我不是100%確定,但我相信這是一個奇怪的互動集合初始化和大括號初始化列表之間。它可以按照以下答案中的描述來解決,但我不確定問題的具體原因是什麼。仔細檢查錯誤消息表明,該陣列「吸收」了額外的支撐,無論如何,缺乏更好的術語;注意它是如何認爲''ao1'和'{1,2,3}'是兩個不同的'Object',而不是同一個'Object'的初始化列表的一部分 –