2012-01-09 61 views
1

這是我的代碼...我有二維矩陣A,B。我想發展A的產品和B.未定義的參考掃描在C + +?

#include <stdio.h> 
    #include <stdlib.h> 

    int main(int argc, char *argv[]) 
    { 

    int scan(); 
    int multiply(); 
    int print(); 

    int metxa[3][4],metxb[4][3],resut[3][3]; 

    int main(); 
    { 
    scan(); 
    multiply(); 
    print(); 
    return 0; 
    } 
    int scan(); 
    { 
    int i; 
    for(i=0;i<3;i++) 
    { 
    scanf("%d %d %d %d",&metxa[i][0],&metxa[i][1],&metxa[i][2],&metxa[i][3]); 
    } 
    for(i=0;i<4;i++) 
    { 
    scanf("%d %d %d",&metxb[i][0],&metxb[i][1],&metxb[i][2]); 
    } 
    } 
    int multiply(); 
    { 
    int i,j; 
    for(i=0;i<3;i++) 
    { 
    for(j=0;j<3;j++) 
    { 
    resut[i][j]=metxa[i][0]*metxb[0][j]+metxa[i][1]*metxb[1][j]+metxa[i][2]*metxb[2][j]+metxa[i][3]*metxb[3][j]; 

    } 
    } 
    } 
    int print(); 
    { 
    int i,j; 
    for(i=0;i<3;i++) 
    { 
    for(j=0;j<3;j++) 
    { 
    printf("%d\t",resut[i][j]); 
    } 
    printf("\n"); 
    } 
    } 
    system("PAUSE"); 
    return 0; 
    } 

,但我得到了鏈接錯誤,不確定的參考掃描和繁殖方法...爲什麼我應該得到這個錯誤?後函數名

+1

爲什麼你會得到這個錯誤?更像是爲什麼你不應該! [The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Marlon 2012-01-09 20:32:55

+7

WTH是這樣嗎?爲什麼你主要在main內部聲明?這段代碼有太多問題。回答這個問題是沒有用的。 [讀一本書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – 2012-01-09 20:33:45

+2

我不認爲這應該downvoted。 OP顯然是編程的新手,看起來這是一個很好的問題。 – Marlon 2012-01-09 20:37:48

回答

3

分號的定義:

int scan(); 
{ 
    ... 
} 

應該是:

int scan() 
{ 
    ... 
} 

同爲multiply()print()功能。

另外:

  • 無論scan()multiply()print()返回一個值,但他們的返回值是int
  • scan(),multiply(),print()並在main()內聲明和定義。

這裏是一個編譯狀態的發佈代碼(我沒有任何聲明,爲的正確性):

#include <stdio.h> 
#include <stdlib.h> 

void scan(); 
void multiply(); 
void print(); 

int metxa[3][4],metxb[4][3],resut[3][3]; 

int main(int argc, char *argv[]) 
{ 
    scan(); 
    multiply(); 
    print(); 
    system("PAUSE"); 

    return 0; 
} 

void scan() 
{ 
    int i; 
    for(i=0;i<3;i++) 
    { 
     scanf("%d %d %d %d", 
       &metxa[i][0], 
       &metxa[i][1], 
       &metxa[i][2], 
       &metxa[i][3]); 
    } 
    for(i=0;i<4;i++) 
    { 
     scanf("%d %d %d", 
       &metxb[i][0], 
       &metxb[i][1], 
       &metxb[i][2]); 
    } 
} 

void multiply() 
{ 
    int i,j; 
    for(i=0;i<3;i++) 
    { 
     for(j=0;j<3;j++) 
     { 
      resut[i][j] = metxa[i][0]* 
          metxb[0][j]+metxa[i][1]* 
          metxb[1][j]+metxa[i][2]* 
          metxb[2][j]+metxa[i][3]* 
          metxb[3][j]; 
     } 
    } 
} 

void print() 
{ 
    int i,j; 
    for(i=0;i<3;i++) 
    { 
     for(j=0;j<3;j++) 
     { 
      printf("%d\t",resut[i][j]); 
     } 
     printf("\n"); 
    } 
} 
+1

他只有一個主要定義。但他已宣佈主力,主力內線。然後緊跟着一個大括號封閉的塊。 – 2012-01-09 20:35:44

+0

@BenjaminLindley,錯過了那個分號。 – hmjd 2012-01-09 20:43:10

+0

@hmjd謝謝你...... :) – desh 2012-01-09 21:10:16

3

您需要任何聲明函數調用它之前,或者至少將它的聲明轉發到稍後的某處。

#include <stdio.h> 
#include <stdlib.h> 

void scan(); 
int main(int argc, char *argv[]) 
{ 
    scan(); 
} 

void scan() 
{ 
    //do stuff 
} 

#include <stdio.h> 
#include <stdlib.h> 

void scan() 
{ 
    //do stuff 
} 
int main(int argc, char *argv[]) 
{ 
    scan(); 
} 

您還需要聲明的主要身體外基質()。就功能而言,如果你這樣做,它們將不可用。