我用这个成员函数重载了* =运算符:
template<class U>
Matriz<T> & operator*=(const Matriz<U> & valor);
我还有一个像matriz这样的构造函数:
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仍然不起作用。
有什么想法吗?如果您需要更多代码,可以将它放在这里。
答案 0 :(得分:2)
使下面的陈述有效:
A *= vec;
您需要另一个operator*=
矢量类型:
template<class U>
Matriz<U> & operator*=(const std::vector<U> & valor);
构造函数将对新构造的对象进行操作但不会转换现有对象,例如,下面的语句应该有效:
A*=std::vector<double>(vetor, vetor + 3);
请参阅live sample
答案 1 :(得分:1)
你可能会这样做
template<typename T, typename conv = std::vector<T> > //for the Matriz class
现在运营商
Matriz<T>& operator *= (const conv& vec);
也是如下的构造函数
Matriz(const conv& vec);
编辑2:
否则你可以这样做
使用此
template<typename TYPE2MUL>
Matriz(const TYPE2MUL& var)
之后你可以使用
A *= vec;
因为它会调用op,因此operator *=(A,Matriz<vector>(vec));
不需要编辑1或之前。
答案 2 :(得分:0)
如果您不想定义另一个运算符'=',则以下代码就可以了。
A *= Matriz<double>(vec).