問題はまさにコンパイラがあなたに伝えていることです。
ディメンションは実行時にのみ認識されるため、次のような実行時機能のみを使用できます。
std::vector<int> v(j, 4);
// `v` contains `j` ints, all initialised to `4`
デフォルトで構築できない要素タイプがある場合は、要素をその場で構築できます。
std::vector<T> v;
v.reserve(j);
for (size_t i = 0; i < j; i++)
v.emplace_back(ctor-args-here);
おそらく初期化リストを使用することもできます。
std::vector<T> v{
T(ctor-args-here), T(ctor-args-here), T(ctor-args-here),
T(ctor-args-here), T(ctor-args-here), T(ctor-args-here)
};
オブジェクトは移動されるか、最悪の場合はコピーされます。
ここでのポイントは、ベクトル要素がデフォルトで構築可能である必要はないということです。
(残念ながら、ループやコードの繰り返しなしでこれを行う方法を知りません。)