定义类构造函数的正确方法是什么

What is the correct way of defining the class constructor?

本文关键字:方法 是什么 构造函数 定义      更新时间:2023-10-16

我正在尝试通过传递给将进行乘法的类来乘以两个矩阵。我在定义构造函数时遇到问题,请帮助我解决这个问题。(错误如下所示)

我的头文件是MatMul.h,因为:

#include<iostream>
#include<iostream>
using namespace std;
class MatMul
{
    double **C;
    int row,col,common;
public:
    MatMul(int p,int q,int r)
    {
        row=p; col=q,common=r;
        C=new double *[row];
        for(int i=0;i<row;i++)
            C[row]=new double [col];
    }
    void multiply(double A[][3],double B[][3],int p,int q,int r)
    {
        for (int i=0;i<row;i++)
        {
            for (int j=0;j<col;j++)
            {
                C[i][j]=0;
                for(int k=0;k<r;k++)
                {
                    C[i][j]=C[i][j]+A[i][k]*B[k][j];
                }
            }
        }
    }
};

并且主CPP文件是

#include<iostream>
#include<iostream>
using namespace std;
#include"MatMul.h"
int main()
{
    int p=3,q=3,r=3;
    double A[p][r]={{1,0,0},{0,1,0},{0,0,1}};
    double B[r][q]={{1,0,0},{0,1,0},{0,0,1}};
    MatMul c(p,q,r);
    c.multiply(A,B,p,q,r);
    return 0;
}

它正在显示

error: no matching function for call to ‘MatMul::multiply(double [p][r], double [r][q], int&, int&, int&)’

请您识别错误并更新它。

静态数组大小不能来自非常量变量。

这将编译得很好(pqr const):

const int p=3,q=3,r=3;
double A[p][r]={{1,0,0},{0,1,0},{0,0,1}};
double B[r][q]={{1,0,0},{0,1,0},{0,0,1}};

此外,无需包含两次<iostream>(甚至一次也不行,因为您经常使用它)。 using namespace std;在您的代码中也是无用的。