C++ 调用类的成员函数时类的对象已损坏

C++ 调用类的成员函数时类的对象已损坏,c++,class,C++,Class,编译和运行程序时,控制台窗口上输出了大量意外的数字 “矩阵”类声明如下: class matrix { public: vector<vector<int> > M; matrix(); matrix(int m, int n); matrix(vector<vector<int> > &m); matrix Mul(matrix m1); void Inverse(); b

编译和运行程序时,控制台窗口上输出了大量意外的数字

“矩阵”类声明如下:

class matrix
{
public:
    vector<vector<int> > M;
    
    matrix();
    matrix(int m, int n);
    matrix(vector<vector<int> > &m);
    matrix Mul(matrix m1);
    void Inverse();
    bool SquareMatrix();
    void GetDet();
    int Det(vector<vector<int> > &m);
    void Print();
};

我怎样才能修好它

我是新来的,如果我没有把问题说清楚,请告诉我

编辑:

matrix matrix::Mul(matrix m1)
{
    vector<vector<int> > Temp(M.size(), vector<int>(m1.M[0].size(), 0));

    if (M[0].size() != m1.M.size()) 
    {
        cout << "Cannot do multiplication!" << endl;
        return matrix();
    }
    else 
    {
        //TO_DO: Multiply two matrixes and print the result.
        
        for (int i = 0; i < M.size(); i++)
        {
            for (int j = 0; j < m1.M[0].size(); j++)
            {
                int ele_buf = 0;
                for (int k = 0; k < M[0].size(); k++)
                {
                    ele_buf += M[i][k] * m1.M[k][j];
                }
                Temp[i][j] = ele_buf;
            }
        }
    }

    int d1 = M.size(), d2 = m1.M[0].size();
    for (int i = 0; i < M.size(); i++)
    {
        M[i].clear();
    }
    M.clear();

    return matrix(Temp);
}
矩阵::Mul(矩阵m1)
{
向量温度(M.size(),向量(m1.M[0].size(),0));
如果(M[0].size()!=m1.M.size())
{

cout您被承诺从
Mul
函数返回
matrix

matrix matrix::Mul(matrix m1);
^^^^^^
你没有遵守承诺。这可能会对你的计划造成影响

在函数中添加适当的return语句

matrix matrix::Mul(matrix m1)
{
  // ... code
  return *this; // matrix(Temp) itself
}

您忘记添加
return
语句,这很容易修复。但是,您的代码不是以良好的OO方式编写的,因此这里有一些改进建议:

  • 不要按值传递
    矩阵m1
    ,因为每次调用此函数都要支付昂贵的副本;请改用
    常量矩阵&m1

  • Mul
    的主体中,您正在修改成员
    M
    ,这是一个严重的副作用;请删除部分代码:

    int d1 = M.size(), d2 = m1.M[0].size();
    for (int i = 0; i < M.size(); i++)
    {
        M[i].clear();
    }
    M.clear();
    
    intd1=M.size(),d2=m1.M[0].size();
    对于(int i=0;i
  • 不要实现名为
    Mul
    的单独函数,而是重载*运算符(参见和)


你从Mul函数返回什么?@MiljenMikic类“matrix”的对象我可以看到,但是返回语句在哪里?啊,我看到我的问题了。很抱歉问了这么愚蠢的问题@没问题。有关更多提示,请参阅我下面的答案。
matrix matrix::Mul(matrix m1);
^^^^^^
matrix matrix::Mul(matrix m1)
{
  // ... code
  return *this; // matrix(Temp) itself
}
int d1 = M.size(), d2 = m1.M[0].size();
for (int i = 0; i < M.size(); i++)
{
    M[i].clear();
}
M.clear();