所以我想用运算符重载求和2个矩阵,但是我在m2矩阵变量上遇到一个错误,说“表达式必须具有整数或无作用域的枚举类型”

template <class type>
class Matrix
{
public:
Matrix(type row, type column, type index);
Matrix<type> operator+(Matrix<type>* other);
type getrow();//not important
type getcolumn();
type** getMatrix();
private:
    type row;
    type column;
    type index;
    type** matrix;
};

template<class type>
Matrix<type> Matrix<type>::operator+(Matrix<type>* other)
{
    if(this->row==other->getrow()&&this->column==other->getcolumn())
    {
        for (int i = 0; i < this->row; i++)
        {
            for (int k = 0; k < this->column; k++)
            {
                other->getMatrix()[i][k] += this->matrix[i][k];
            }
        }
    }
    return other;
}

int main()
{
    Matrix<int>* m1 = new Matrix<int>(1, 3, 1);//(row,column,index)
    Matrix<int>* m2 = new Matrix<int>(3, 3, 3);

    m1 = m1 + m2;//error on m2
}


我如何解决此问题寻求帮助:)

最佳答案

即使没有完整的错误输出,这里的问题也很容易解决(但将来请提供完整的错误输出)。

使用m1 + m2,您添加两个指针,而不是两个Matrix<int>对象(m1 + m2本质上等效于&m1[m2])。

要么不使用指针和new

Matrix<int> m1(1, 3, 1);//(row,column,index)
Matrix<int> m2(3, 3, 3);


或取消引用指针:

*m1 = *m1 + *m2;

关于c++ - 类型名称的矩阵总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59190953/

10-16 17:59