Ваша ошибка не имеет ничего общего с шаблонами. Рассмотрим следующий код
struct Int { int i; };
int main()
{
Int z(1); // doesn't compile
}
, и вы получите ошибку, no matching constructor Int(int)
.
Классы - это абстракция над чем-то другим. Может показаться очевидным, что int
и Int
в этом случае - это одно и то же, и создание одного должно быть похоже на создание другого. Но компилятор этого не знает, поэтому вам нужно предоставить конструктор, который передает аргумент члену.
struct Int
{
int i;
Int(int n) : i(n) {}
};
Обратите внимание, что в C ++ 20 компилятор действительно сможет выяснить что вы хотите использовать каждый аргумент конструктора для инициализации соответствующего члена вашего класса, поэтому даже без предоставленного конструктора Int
будет работать как int
.
Однако даже в этом случае ваш код не будет работать, так как вам нужно использовать более сложные правила для создания ваших членов. В вашем случае вам понадобится что-то вроде
myVector(int n) : vector_a(n), vector_b(n) {}
Предполагая, что вы хотите, чтобы внутренние векторы создавались со значением, переданным в конструктор. Судя по вашему вызывающему коду, кажется, что вы этого хотите, но вы можете написать в конструкторе любую логику c.