加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:05:34 所属栏目:百科 来源:网络整理
导读:我在struct’matrix’中有2个构造函数. matrix(const unsigned int m,const unsigned int n);matrix(const std::vectorstd::vectordouble elements); 当我这样称呼它 matrix mat({{1},{1}}); 它抛出错误 call of overloaded ‘matrix(brace-enclosed initial
我在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 ambiguous
note: 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}}};

首先.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读