2016-06-14 124 views
-1

我想通过传递给将会乘法的类来乘两个矩阵。我面临的问题,同时定义构造函数,请帮助我这个..(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&)’ 

请你能找出错误并进行更新。

+0

如果'q'和'r'不是常数,'double A [p] [r]'是非标准的。尝试使用'const int p = 3,q = 3' – Ajay

+0

'double A [p] [r] = {{1,0,0},{0,1,0},{0,0 ,1}}'。 init值是固定的(3x3),'p','r'是“变量”。简单地说'双A [3] [3]'。 – i486

回答

0

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

这将编译罚款(由pqrconst):

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;在你的代码中也没用。

相关问题