请问一个c++问题

博客探讨了C++编程中遇到的一个具体问题,集中在代码的第178行。文章详细分析了可能导致错误的原因,并可能涉及语法错误、类型不匹配、未初始化变量或其他常见编程陷阱。
#include <iostream>
#include <cstdlib>
using namespace std;
class matrix
{
private:
    int rows, cols;
    int** p;
public:
    matrix();
    matrix(int& M, int& N);
    matrix(matrix& A, int&& m, int& n);
    ~matrix();

    matrix multi(int x);   // 数乘
    int det();           // 计算行列式
    void out();    //输出矩阵
    void input();

    matrix operator+(matrix& another); //重载加法运算实现矩阵相加
    matrix operator*(matrix& another); //重载乘法运算实现矩阵相乘
};

matrix::matrix(int& M, int& N)
{
    rows = M, cols = N;
    p = new int* [rows];
    for (int i = 0; i < M; i++)
    {
        p[i] = new int[cols];
    }
}

matrix::matrix(matrix& A, int&& m, int& n)   //从矩阵A中删除第m行第n列后得到新的矩阵
{
    rows = A.rows - 1, cols = A.cols - 1;
    p = new int* [rows];
    for (int i = 0; i < rows; i++)
    {
        p[i] = new int[cols];
    }
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            p[i][j] = A.p[i][j];

    for (int i = 0; i < m; i++)
        for (int j = n + 1; j < A.cols; j++)
            p[i][j - 1] = A.p[i][j];

    for (int i = m + 1; i < A.rows; i++)
        for (int j = 0; j < n; j++)
            p[i - 1][j] = A.p[i][j];

    for (int i = m + 1; i < A.rows; i++)
        for (int j = n + 1; j < A.cols; j++)
            p[i - 1][j - 1] = A.p[i][j];
}

matrix::~matrix()
{
    for (int i = 0; i < rows; i++)
        delete[] p[i];

    delete[] p;
}

matrix matrix::multi(int x)   // 数乘
{
    matrix tmp(rows, cols);
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
            tmp.p[i][j] = p[i][j] * x;
    }

    return tmp;
}

void matrix::out()    //输出矩阵
{
    /* 逐行输出,数据间用空格分隔 */
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
            cout << p[i][j] << ' ';
        cout << endl;
    }

}

void matrix::input()
{
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            cin >> p[i][j];

}

matrix matrix::operator+(matrix& another) //重载加法运算实现矩阵相加
{
    matrix tmp(rows, cols);
    /* 矩阵对应位置元素相加 */
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            tmp.p[i][j] = p[i][j] + another.p[i][j];

    return tmp;
}

matrix matrix::operator*(matrix& another)  //重载乘法运算实现矩阵相乘
{
    matrix tmp(rows, another.cols);
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < another.cols; j++)
        {
            /* 计算A矩阵的第i行与B矩阵的第j列元素对应相乘后之和,作为新矩阵的第i行第j列元素的值 */
            tmp.p[i][j] = 0;
            for (int ha = 0; ha < another.rows; ha++)
                tmp.p[i][j] += p[i][ha] * another.p[ha][j];

        }
    }
    return tmp;
}

int matrix::det()
{
    if (rows == 1)
        return p[0][0];
    else
    {
        int result = 0, flag;
        for (int i = 0; i < cols; i++)
        {
            flag = (i % 2) ? -1 : 1;
            matrix tmp(*this, 0, i);
            result = result + flag * p[0][i] * tmp.det();    // 使用代数余子式求行列式的值, 递归
        }
        return result;
    }
}
int main()
{
    int M, N;

    // A矩阵的行和列
    cin >> M >> N;

    matrix mA(M, N);    //生成A矩阵

    // 输入矩阵值

    mA.input();

    ////// 输入数乘值

    ////int x;
    ////cin >> x;

    ////matrix mm1 = mA.multi(x);

    ////mm1.out();

    //B矩阵的行和列
    int K, L;
    cin >> K >> L;

    matrix mB(K, L);  //生成B矩阵
    mB.input();


    ///* 求矩阵A和矩阵B的和 */

    if (M == K && N == L)
    {
        matrix mm2(M, N);
        mm2 = mA + mB;
        mm2.out();
    }

    /* 求矩阵A和矩阵B的乘积矩阵 */
    if (N == K)
    {
        matrix mm3(M, L);
        mm3 = mA * mB;
        mm3.out();
    }

    /* 矩阵A的行列式的值 */
    if (M == N)
        cout << mA.det() << endl;

    if (K == L)
        cout << mB.det() << endl;

    return 0;
}

请问在178行出错是什么原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值