2016-06-14 23 views
-1

私は、乗算を行うクラスに渡すことによって2つの行列を乗算しようとしています。クラスコンストラクタを定義する正しい方法は何ですか?

#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ファイルが

です:コンストラクタを定義しながら、私は私のヘッダファイルとしてMatMul.hある

この..(errrorは以下の通りである)で私を助けてください、問題に直面しています
#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}} '。初期値は固定(3x3)で、 'p'、' r'は「変数」です。単純に 'double 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}}; 

はまた、必要が(あなたがD'ONTそれを使用しないで一度ものような)二回 <iostream>を含まないように。 using namespace std;もあなたのコードでは役に立たない。

関連する問題