未定义类的报错

来源:互联网 发布:软件实施考核指标 编辑:程序博客网 时间:2024/05/13 11:16

1、变量未定义

变量的定义我们都知道,不过,有时候我们写的代码,明明已经定义了,而且还没啥语法错误,但是,就是一直报错。下面看这个例子:

int main(){    printf("Please Enter->\n");    int n=0;    scanf("%d",&n);    return 0;}

这是一个简单的提输入,然后接收数据的代码,不过,在VS2008上,这段代码是编不过去的,二宝的错误是:error C2065: “n”: 未声明的标识符。
可能在其他编译器上这里是没有问题的,但是在VS2008上,这里的n未声明,原因是:n的定义不是在最上面的,就是这么简单,只需将n定义在printf上面即可:

int main(){    int n=0;    printf("Please Enter->\n");    scanf("%d",&n);    return 0;}

2、函数未定义

同样的道理,在调用函数的时候,这个问题也会被遇到,下面看一个简单的调用函数代码:

int main(){    int num=0;    printf("Please Enter->\n");    scanf("%d",&num);    if(is_prime(num))    {        printf("num is prime !\n");    }    else    {        printf("num is not prime !\n");    }    return 0;}int is_prime(int n){    int i=0;    for(i=2;i<n/2;i++)    {        if(n%i == 0)            return 0;    }    return 1;}

这里我把被调用的函数写在主函数下面,那么就会报错:
“is_prime”未定义;假设外部返回 int
解决的方案有两种:
一是,在主函数前面在声明一下被调函数即可

int is_prime(int n);int main(){    int num=0;    printf("Please Enter->\n");    scanf("%d",&num);    if(is_prime(num))    {        printf("num is prime !\n");    }    else    {        printf("num is not prime !\n");    }    return 0;}int is_prime(int n){    int i=0;    for(i=2;i<n/2;i++)    {        if(n%i == 0)            return 0;    }    return 1;}

另外一种就是直接吧被调函数写在主函数上面:

int is_prime(int n){    int i=0;    for(i=2;i<n/2;i++)    {        if(n%i == 0)            return 0;    }    return 1;}int main(){    int num=0;    printf("Please Enter->\n");    scanf("%d",&num);    if(is_prime(num))    {        printf("num is prime !\n");    }    else    {        printf("num is not prime !\n");    }    return 0;}

这样更方便一些,而且,我建议以后函数的时候保持这个良好的习惯,至少在刚学的时候保持。

3、 结构体未定义

同样的事情也会发生在结构体上,写结构体的时候也是一定要写在使用这个结构体的函数之前,要不然,会出现结构体未定义的现象(这个错误我犯过……)
例如:

void change(struct student stu)  {      stu.score[0] = 100;      strcpy(stu.name, "jerry");  } struct student  {      int num;      char name[20];      float score[3];  }; int main()  {      struct student stu;      stu.num = 12345;      strcpy(stu.name, "Tom");      stu.score[0] = 67.5;      stu.score[1] = 89;      stu.score[2] = 78.6;      change(stu);      printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);      printf("\n");      return 0;  }

应该为:

struct student  {      int num;      char name[20];      float score[3];  };  void change(struct student stu)  {      stu.score[0] = 100;      strcpy(stu.name, "jerry");  } int main()  {      struct student stu;      stu.num = 12345;      strcpy(stu.name, "Tom");      stu.score[0] = 67.5;      stu.score[1] = 89;      stu.score[2] = 78.6;      change(stu);      printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);      printf("\n");      return 0;  } 
1 0
原创粉丝点击