对c++中扫描的未定义引用

undefined reference to scan in c++?

本文关键字:未定义 引用 扫描 c++      更新时间:2023-10-16

这是我的代码。。。我有二维矩阵A,B。我想开发A和B的产品。

#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("%dt",resut[i][j]);
    }
    printf("n");
    }
    }
    system("PAUSE");
    return 0;
    }

但我得到了链接器错误,未定义对扫描和乘法方法的引用。。。为什么我要得到这个错误?

定义处函数名称后的分号:

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("%dt",resut[i][j]);
        }
        printf("n");
    }
}

您需要在调用函数之前声明它,或者至少在稍后的某个地方将它与实现一起转发声明。

#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();
}

您还需要在main()的主体之外声明矩阵。与函数一样,如果您这样做,它们将不可用。