我有两个课程,my_matrix
和my_vector
课程,其中my_vector
来自my_matrix
。
当我执行my_matrix tmp = vec * mat
时,它会返回一个矩阵(mat
是my_matrix
的实例,vec
是my_vector
的实例。我在这儿很好。
但是当我my_vector tmp = mat * vec
时,我在clang ++中得到了这个错误:
my_matrix
'my_vector
'到'my_matrix
'
和g ++中的错误:
转换自&{39;
my_vector
'到非标量类型'mat
'请求的
我想我知道问题所在。在vec
和my_matrix
相乘后,返回类型为void operator*(my_vector&, my_matrix&)
,您无法将基类转换为派生类。
您认为解决方案是什么?
我已经尝试定义my_vector operator*(my_matrix&)
(不是派生类的成员函数),它在派生类中调用class my_matrix{
public:
my_matrix operator*(my_matrix& other_mat){
my_matrix tmp(row, other_mat.col);
// for loop to matrix multiply that fill up the tmp
return tmp;
}
};
class my_vector:public my_matrix{
public:
// not sure if I need operator* here
// Somehow I want to bring the my_vector tmp = mat * vec; here so
// it would return vector instead of matrix
// I have tried : but not successful
// my_vector operator*(my_matrix&)
// void operator*(my_vector&, my_matrix&); (non member)
};
int main(){
my_matrix mat = {{1,2,3},{4,5,6}}; // 2x3
my_vector vec = {1,2,3}; // 3x1
my_vector tmp = mat * vec; // 2x3 * 3*1 gives 2x1 vector
}
,但它到目前为止还不起作用。
bls_map_county2()
答案 0 :(得分:1)
首先,现有operator*
的参数错误:
my_matrix operator*(my_matrix& other_mat){
*
运算符的参数应为const
,方法本身应为const
。毕竟,乘法运算符不应该修改任何一个操作数:
my_matrix operator*(const my_matrix& other_mat) const {
解决了这个问题,你现在可以有意义地重载运算符:
my_vector operator*(const my_vector& other_mat) const {
以您想要定义此操作的任何方式实现乘法运算。
现在,my_matrix
中的my_matrix
乘以my_vector
,并乘以my_vector
返回my_matrix
。 *
运算符导致{{1}}重载,返回值取决于您将其乘以的内容。
答案 1 :(得分:1)
尝试这样的事情:
class my_matrix {
public:
my_matrix operator*(const my_matrix& other_mat) const {
my_matrix tmp(row, other_mat.col);
// for loop to matrix multiply that fill up the tmp
return tmp;
}
};
class my_vector : public my_matrix {
public:
using my_matrix::operator*;
my_vector operator*(const my_vector& other_vec) const {
my_vector tmp(...);
// for loop to vector multiply that fill up the tmp
return tmp;
}
};
my_vector operator*(const my_matrix &lhs, const my_vector &rhs)
{
my_vector tmp(...);
// for loop to vector multiply that fill up the tmp
return tmp;
}
int main() {
my_matrix mat = {{1,2,3},{4,5,6}}; // 2x3
my_vector vec = {1,2,3}; // 3x1
my_vector tmp = mat * vec; // 2x3 * 3x1 gives 2x1 vector
}