【发布时间】:2013-05-27 04:25:38
【问题描述】:
我用这个成员函数重载了 *= 运算符:
template<class U>
Matriz<T> & operator*=(const Matriz<U> & valor);
而且我也有一个这样的构造函数:
Matriz(const std::vector<T> & vector);
好吧,我想做这样的事情:
double vetor[3] = { 1, 2, 3 };
std::vector<double> vec(vetor, vetor + 3);
Matriz<double> A("src//imatriz.dat"); //Creates a matrix with parameters from a file.
A*=vec;
也就是说,我想将一个矩阵乘以一个向量。问题是编译器返回运算符不匹配。
---EDIT2---
按照建议,我也试过这个:
template<class U>
friend Matriz<T> & operator*=(Matriz<U> & lhs, const Matriz<U> & rhs)
但 A*=vec 仍然不起作用。
有什么想法吗?如果您需要更多代码,可以将其放在这里。
【问题讨论】:
-
如果你的重载是一个全局函数(不能从你的粘贴中理解),它将失败。您可以考虑将其设为类方法。
-
是类方法。
-
那么你应该重载
*=以vector 作为参数?A*=vec;应该嵌入对类似operator*=(A,vec);的调用,其中vec 的类型是vector。 -
变量 A 的实例化似乎很奇怪。试试这样的:
Matriz<double> A = Matriz<double>(vec) -
@Leandro 到目前为止的答案都是正确的,但是您的基本问题为什么编译器没有执行隐式转换尚未得到解决。线程C++ implicit type conversion with template 回答了它。
标签: c++ templates operator-overloading type-conversion