2012-01-09 107 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(); 
} 

您还需要声明的主要身体外基质()。就功能而言,如果你这样做,它们将不可用。