我有一个简短且方便的多维 vector 代码,可以在初始化期间选择大小和默认值。
#include <iostream>
#include <vector>
using std::vector;
template<int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
static_assert(D >= 1, "Vector dimension must be greater than zero!");
template<typename... Args>
Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template<typename T>
struct Vec<1, T> : public vector<T> {
Vec(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};
int main() {
int nbRow, nbCol;
std::cin >> nbRow >> nbCol;
Vec<2, int> grid(nbRow, nbCol, 0);
}
它适用于GCC,但不适用于clang 10.0.0(标准c++ 17或gnu ++ 17,两者均不起作用)。main.cpp:15:25: error: missing default argument on parameter 'args'
Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
^
main.cpp:30:14: note: in instantiation of function template specialization 'Vec<2, int>::Vec<int, int>' requested here
Vec<2, int> grid(nbRow, nbCol, 7);
^
main.cpp:15:25: error: missing default argument on parameter 'args'
Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
有简单的方法可以解决此问题吗?提前致谢!
最佳答案
int n = 0
带有默认值的参数后不能跟没有默认值的参数。删除=0
关于c++ - 如何使用clang修复参数 'args'上缺少的默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62783538/