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

时间:2016-06-14 06:24:43

标签: c++ class

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

我的头文件是MatMul.h:

function.*\{\n*}

并且maincpp文件是

#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];
                }
            }
        }
    }
};

显示

#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;
}

请您确定错误并进行更新。

1 个答案:

答案 0 :(得分:0)

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

这将编译正常(制作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;在您的代码中也没用。