将模板运算符*应用于类std :: complex <double>时出错

时间:2019-05-04 23:37:16

标签: c++ templates operator-keyword

我只定义了一个模板矩阵类matrix <class T>,并且我想重载operator*,以矩阵和另一个类中的元素作为参数,例如int,{{1 }}。重载的函数可以与doublematrix<int>matrix<double>一起正常工作,但是当我尝试多个matrix<complex<int>>1

时,甚至无法编译

matrix<complex<double>>的定义:

operator*

template <typename _T, typename _U> auto operator* (const _T& t, const matrix<_U>& m)->matrix<decltype(_T(0)*_U(0))> { matrix<decltype(_T(0)*_U(0))> r(m); for (int i = 0; i < r.row; ++i) for (int j = 0; j < r.col; ++j) r[i][j] *= t; return r; } 代码:

Main

我对此感到疯狂。 matrix<complex<double>> F(4, 4, {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2}); cout << 1*F; //error: E0349 no operator "*" matches these operands // binary '*': no global operator found which takes type 'matrix<std::complex<double>>' (or there is no acceptable conversion) //work fine with matrix<complex<int>> 怎么了?任何答案将不胜感激。

0 个答案:

没有答案