matrix(const unsigned int m,const unsigned int n);matrix(const std::vector<std::vector<double>> &elements);
当我这样称呼它
matrix mat({{1},{1}});
它抛出错误
call of overloaded ‘matrix(<brace-enclosed initializer List>)’ is ambiguousnote: candIDate: matrix::matrix(const std::vector<std::vector<double> >&)note: candIDate: matrix::matrix(const matrix&)
所以,它认为,{{1},{1}} – 是’矩阵’对象,但是如何?
解决方法So,it thinks,that {{1},{1}} – is ‘matrix’ object,but how?
在您的示例代码中
matrix mat({{1},{1}});
你明确告诉编译器尝试将该表达式与矩阵构造函数匹配.
它并没有“认为”表达式{{1},{1}}是一个矩阵,它试图将它组合成一个,因为你问它.
至于为什么你得到错误(这不是你问的,但似乎值得一提),这是因为
vector<double> v{1};
是具有单个值(1.0)的向量的有效声明,等等
vector<vector<double>> vv{{1},{1}};
也是一个包含两个元素向量的向量的有效声明,每个向量都有一个值为1.0的double元素,最后也是如此
mat{{{1},{1}}};
将是向量构造函数的有效匹配.由于允许隐式进行此转换,因此我们允许重写
mat m({{1},{1}});
如
mat m(mat{{{1},{1}}});
因此含糊不清.请仔细注意圆形和花括号.
您可以使构造函数隐式,或者只是习惯于统一初始化样式和写入
mat m{{{1},{1}}};
首先.
总结以上是内存溢出为你收集整理的c – 结构构造函数调用不明确全部内容,希望文章能够帮你解决c – 结构构造函数调用不明确所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)