Всегда смотрите полное сообщение об ошибке, современные компиляторы, как правило, очень полезны. В этом случае ключевая информация: cannot convert from 'int' to 'const _Ty' with _Ty=node
, которая при замене шаблона типа дает cannot convert from 'int' to 'const node'
. Это не связано с наличием вложенных векторов. Вы увидите ту же ошибку со следующим кодом:
struct node {
int data;
node() {
data = 0;
}
};
vector<struct node> n;
n.push_back(1);
Ошибка заключается в том, что компилятор не может преобразовать int
в node
. Исправление заключается в предоставлении конструктора, который принимает int
:
struct node {
int data;
node()
: data(0)
{
}
node(int value)
: data(value)
{
}
};
Обратите внимание на использование инициализаторов, а не на присваивание членам в теле конструктора, это создает более эффективный код.
В идеале конструкторы, принимающие один аргумент, должны быть помечены explicit
, чтобы помочь предотвратить такие проблемы, как неоднозначности:
struct node {
int data;
node()
: data(0)
{
}
explicit node(int value)
: data(value)
{
}
};
Обратите внимание, что вам нужно немного изменить свой вызов push_back
, чтобы явно создать node
:
v[1].push_back(node(value));
или чуть более эффективный и менее набирающий:
v[1].emplace_back(value)