c – 结构构造函数调用不明确

c – 结构构造函数调用不明确,第1张

概述我在struct’matrix’中有2个构造函数. 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( 我在struct’matrix’中有2个构造函数.

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 – 结构构造函数调用不明确所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存