什么是定义类构造函数的正确方法?
问题描述:
我想通过传递给将会乘法的类来乘两个矩阵。我面临的问题,同时定义构造函数,请帮助我这个..(errror如下图所示)什么是定义类构造函数的正确方法?
我的头文件是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];
}
}
}
}
};
和maincpp文件
#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&)’
请你能找出错误并进行更新。
答
静态数组大小不能来自非const变量。
这将编译罚款(由p
,q
和r
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;
在你的代码中也没用。
如果'q'和'r'不是常数,'double A [p] [r]'是非标准的。尝试使用'const int p = 3,q = 3' – Ajay
'double A [p] [r] = {{1,0,0},{0,1,0},{0,0 ,1}}'。 init值是固定的(3x3),'p','r'是“变量”。简单地说'双A [3] [3]'。 – i486