2

我用这个成员函数重载了 *= 运算符:

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;

也就是说,我想将一个矩阵乘以一个向量。问题是编译器返回运算符不匹配。

---编辑2---

正如建议的那样,我也试过这个:

template<class U>
friend Matriz<T> & operator*=(Matriz<U> & lhs, const Matriz<U> & rhs)

但 A*=vec 仍然不起作用。

任何想法?如果您需要更多代码,可以将其放在这里。

4

3 回答 3

2

要使以下语句起作用:

A *= vec;

你需要另一个operator*=向量类型:

template<class U>
Matriz<U> & operator*=(const std::vector<U> & valor);

构造函数将对新构造的对象进行操作,但不会转换现有对象,例如,下面的语句应该可以工作:

A*=std::vector<double>(vetor, vetor + 3);

查看实时样本

于 2013-05-27T04:40:38.287 回答
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));不需要 EDIT 1 或在此之前。

于 2013-05-27T05:11:01.623 回答
0

如果不想再定义另一个运算符'=',下面的代码就可以了。

A *= Matriz<double>(vec).
于 2013-05-27T04:45:30.347 回答