2012-04-25 48 views
1

私は2つの行列の積を計算するコードを書いています。私はC = A * Bという行列Cを示す関数を呼び出しています。問題は、私の機能がうまくいかないことです。コンパイラは次のメッセージを表示します。 "` showMatC 'は宣言されていません(最初にこの関数を使用してください)。私はコードを2倍にしましたが、問題を理解することはできません。コードは以下の通りです。どんな助けもありがとう。私はDev-C++を使用しています。呼び出された関数が機能しません

#include<iostream> 
#include<stdlib.h> 
#include<iomanip> 
#include<math.h> 


using namespace std; 


const int N =32; 



void initstaticmatrixA(double MatA[][N], int n) //initialize matrix A 
{             // regular indexing with 2 indices 
    for(int i=0; i<n*n; i++) 

    MatA[i/n][i%n]=i; 
} 

void initstaticmatrixB(double MatB[][N], int n) //initialize matrix B 
{          // regular indexing with 2 indices 
    for(int i=0; i<n*n; i++) 

     MatB[i/n][i%n]=i; 
} 

void showMats(double MatA[][N], double MatB[][N],int n) //display matrices A & B 
{ 
    int c; 
    cout<<"Matrix A:       Matrix B:"<<endl; 
    cout<<"------------      ------------"<<endl; 
    cout<<endl;       //regular indexing 
    for(int r=0; r<n; r++, cout<<endl) 
    { 
    for(c=0;c<n;c++) 
     cout<<setw(4)<<MatA[r][c]; 
     cout<<"    "; 
    for(c=0;c<n;c++) 
     cout<<setw(4)<<MatB[r][c]; 
    } 

} 

void CalculateMatC(double MatA[][N], double MatB[][N], int n) //calculate the product  C=A*B 
{ 
    int m=n; 
    double MatC[N][N]; 
    int i, j, k; 
    for(i=0; i<n; i++) 
    for(j=0; j<n; j++) 
     for(MatC[i][j]=k=0; k<n; k++) 
     MatC[i][j] += MatA[i][k]*MatB[k][j]; 
    showMatC(MatC, m);  //Where the problem is!!!! 
} 

void showMatC(double MatC[][N], int n) //show matrix C 
{ 
    int c; 
    cout<<"Matrix C:"<<endl; 
    cout<<"------------"<<endl; 
    cout<<endl;       //regular indexing 
    for(int r=0; r<n; r++, cout<<endl) 

    for(c=0;c<n;c++) 
    cout<<setw(4)<<MatC[r][c]; 
} 

int main() 
{ 
    const int n=2; 
    double MatA[N][N], MatB[N][N]; //single 
    initstaticmatrixA(MatA, n); 
    initstaticmatrixB(MatB, n); 
    showMats(MatA,MatB, n); 
    CalculateMatC(MatA, MatB, n); 
    cout<<endl<<endl; 

    system("pause"); 

    return 0; 
} 
+0

の開始時に最初の使用の前に '' showMatC()を定義します。 –

答えて

1

あなたがCalculateMatCshowMatCを定義する必要があります。

2

あなたが宣言する前に、CalculateMatC()でshowMatC()を使用しています。この問題を解決する、のいずれかshowMatC(の定義を移動します)CalculateMatC(上記)または少なくとも事前にそれを宣言するには:Cで

void showMatC(double MatC[][N], int n); 

void CalculateMatC(double MatA[][N], double MatB[][N], int n) //calculate the product  C=A*B 
{ 
// ... 
1

を使用すると、現在の関数呼び出しの前に書かれていない関数を呼び出すことはできません++。関数の順序を変更するか、前方宣言を行います。これは、関数呼び出しを読み取ったときにコンパイラがshowMatCを認識しないためです。

void showMatC(double MatC[][N], int n); 

文書

+0

私はそれに注意を払わなかったと思う。それはうまく動作します。ありがとう!!! – T4000

+0

@ T4000あなたは歓迎します。あなたが答えが好きなら、あなたはいつもそれを合格とマークすることができます;) – Topo

関連する問題