Просто добавьте еще одну пару скобок, и все будет в порядке!:
Class() : _list( {{{3, 4}}} ) {}
А также:
Class c( {{{2, 4}}} );
Конструкция с скобками обычно используется для обозначения скобок-инициализация элементов данных или построение элементов из диапазона.
Структуру Value
здесь можно инициализировать просто с помощью {3,4}
, поскольку она имеет 2 члена данных и никакого другого конструктора.
Однако в случае std::vector
этот тип конструкции используется для указания набораэлементов, которые будут храниться в векторе при его построении.
Наконец, для List
заключенный в фигурные скобки конструктор может использовать только один тип данных std::vector<Value>
, чтобы использовать его для инициализации только данных.член values
, который сам имеет тип std::vector<Value>
.
Здесь каждому классу нужен инициализатор в скобках.Один для Value
, один для std::vector<Value>
и один для List
.В случае Value
в фигурных скобках может быть только 2 данных (самые внутренние фигурные скобки).Но для std::vector<Value>
внутри фигурных скобок может быть одно или несколько данных типа Value
.Наконец, для List в фигурных скобках может быть только один элемент данных (самые внешние фигурные скобки).
Например:
Class() : _list( {{{3, 4}, {5, 6}}} ) {}
также в порядке и приводит к тому, что в него помещаются 2 данных типа Value
вектор!
Кроме того, чтобы использовать структуры / классы-члены в конструкторах, сначала объявите их:
class Class {
public:
struct Value;
struct List;
Class() : _list( {{{3, 4}}} ) {}
Class(List _l) : _list(_l) {}
struct Value {
int a;
int b;
};
struct List {
std::vector<Value> values;
};
private:
List _list;
};
При сравнении было бы хорошо удалить фигурные скобкидля List
Если класс был определен следующим образом:
class Class {
public:
struct Value;
struct List;
Class() : _list( {3, 4} ) {}
Class(List _l) : _list(_l) {}
struct Value {
int a;
int b;
};
struct List {
Value values;
};
private:
List _list;
};
Но это потому, что List (а также Value) не имеет определяемого пользователем конструктора , а List имеет только один член данных!
Удачи