Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试重载矩阵的*运算符_C++_Overloading - Fatal编程技术网

C++ 尝试重载矩阵的*运算符

C++ 尝试重载矩阵的*运算符,c++,overloading,C++,Overloading,因此,我试图重载*运算符,使其与存储在int向量的向量中的2个矩阵相乘。然而,当我输入原始矩阵时,我的代码似乎总是给我错误的输出: 当我执行{0,1,0},{0,2,0},{0,3,0}*{0,2,0},{0,2,0},{0,2,0}时,程序会给出: 0 0 0 0 4 4 0 0 0 0 4 4 0 4 0 0 4 2 0 0 0 而不是 0 2 0 0 4 0 0 6 0 接线员* Matrix Matrix::op

因此,我试图重载*运算符,使其与存储在int向量的向量中的2个矩阵相乘。然而,当我输入原始矩阵时,我的代码似乎总是给我错误的输出:

当我执行{0,1,0},{0,2,0},{0,3,0}*{0,2,0},{0,2,0},{0,2,0}时,程序会给出:

0
0
0
0
4
4
0
0
0
0
4
4
0       4       0
0       4       2
0       0       0
而不是

0 2 0
0 4 0
0 6 0
接线员*

Matrix Matrix::operator*(Matrix m){
    vector<int> mRow;
    vector<int> mCol;
    vector<int> newRow;
    Matrix newM(row, column);

    for(int i =0; i<row-1; j++){
        for(int j = 0; j<row-1; i++){
            mRow = getRow(j);
            mCol = m.getCol(j);
            int r = 0;
            int c = 0;
            int product = 0;
            do{
                product+=mRow[r]*mCol[c];
                ++r;
                ++c;
                cout << product << endl;
            }while(r < row && c < column);          
            newRow.push_back(product);
        }
        newM.setRow(newRow,i);
        newRow.clear(); 
    }
    return newM;
}
矩阵::运算符*(矩阵m){
矢量mRow;
向量mCol;
向量纽罗;
矩阵newM(行、列);

这就是为什么我总是用
k
而不是
j
j
似乎也很可疑,也许
j
@a22asin:注意我花了45秒才发现的原因。:(事实上,我没有吹嘘)@lightnessraceinorbit“比赛”确实,只是一个旁注-考虑重载<代码>操作符*= <代码> >,并按照<代码>操作符*> <代码>实现<代码>运算符*/COD>。典型的是将逻辑放在<代码> *> <代码>操作符中,并有<代码> */Cuth>操作员调用它。这是因为<代码> *= <代码>可以在现有矩阵上工作,而<代码> */代码>会产生副本,因此效率较低。我还建议您通过常量引用获取m以避免复制它。
mRow=getRow(j);mCol=m.getCol(j);
这是每次复制整个向量。这真的是您想要做的吗?为什么不将其存储在引用或指针中。
for(int j = 0; j<row-1; i++){
//      ^      ^        ^