i have an error:"incomplete definition of type "struct Bird""
i have an error:"incomplete definition of type "struct Bird""
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <limits.h>
#include <stdlib.h>
#include <math.h>
#include <sys/io.h>
#include <fcntl.h>
int main(){
struct BirdHome{
int area;
int height;
int feederquantity;
char hasNest[1];
};
struct Bird{
char isRinged[1];
char nameSpecies[50];
int birdAgeMonths;
struct BirdHome hom;
char gender[1];
};
struct Bird sparrow;
strcpy(sparrow.isRinged,"T");
strcpy(sparrow.nameSpecies,"sparrow");
sparrow.birdAgeMonths=4;
sparrow.hom.area=30;
sparrow.hom.height=20;
sparrow.hom.feederquantity=2;
strcpy(sparrow.hom.hasNest,"F");
strcpy(sparrow.gender,"M");
printBird(&sparrow);
return 0;
}
void printBird(struct Bird *bird){
printf("Bird info:\n");
printf("\tIs bird ringed:%s\n", (*bird).isRinged);
printf("\tThe name of the specie:\n",(*bird).nameSpecies);
printf("\tThe birds age is:%d\n",(*bird).birdAgeMonths );
printf("Bird house info:\n");
printf("\tArea of its house is:%d\n",(*bird).hom.area);
printf("\tThe height of its house is:%d\n",(*bird).hom.height);
printf("\tThe quantity of feeders is:%d\n",(*bird).hom.feederquantity );
printf("\tThe house has nest:%s\n",(*bird).hom.hasNest );
printf("\tBird's gender is:%s\n",(*bird).gender );
}
我已经尝试添加任何可能的库(你可以在代码中看到它),但是编译代码时仍然会出现错误。好吧,如果我们在主函数中重新编码函数(使用所有经过编辑的代码),它会正常工作,但我希望它与一个单独的函数一起工作。你能帮我吗?
类型 struct Bird 的范围是函数 main 的外部块范围。
int main(){
struct BirdHome{
int area;
int height;
int feederquantity;
char hasNest[1];
};
struct Bird{
char isRinged[1];
char nameSpecies[50];
int birdAgeMonths;
struct BirdHome hom;
char gender[1];
};
//...
因此在函数 main 之外,类型 struct Bird
未声明且未定义。
然而,在函数 printBird
的定义中,应该在函数 main
之前声明,您试图使用结构的数据成员,尽管在此范围内声明了 struct Bird
in main 未声明且未定义。
void printBird(struct Bird *bird){
printf("Bird info:\n");
printf("\tIs bird ringed:%s\n", (*bird).isRinged);
//..
就是你在函数参数列表中声明了不完整的类型struct Bird
void printBird(struct Bird *bird){
^^^^^^^^^^^
这与在 main 中声明的 struct Bird
没有任何共同之处。
从 main
移动结构定义,使其定义可用于函数 printBird
。然后将函数声明放在函数 main
.
之前
此外,由于结构类型的对象是通过引用传递给函数的,并且在函数中没有被更改,因此您应该使用限定符 const
void printBird( const struct Bird *bird);
注意这个调用
strcpy(sparrow.isRinged,"T");
调用未定义的行为,因为数组 isRinged
不够大,无法存储字符串文字“T”,该字符串文字在内部表示为具有两个元素的字符数组 { 'T', '[=27=]' }
.
你至少应该这样声明
char isRinged[2];
这些语句存在同样的问题
strcpy(sparrow.hom.hasNest,"F");
strcpy(sparrow.gender,"M");
您需要扩大使用的字符数组。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <limits.h>
#include <stdlib.h>
#include <math.h>
#include <sys/io.h>
#include <fcntl.h>
int main(){
struct BirdHome{
int area;
int height;
int feederquantity;
char hasNest[1];
};
struct Bird{
char isRinged[1];
char nameSpecies[50];
int birdAgeMonths;
struct BirdHome hom;
char gender[1];
};
struct Bird sparrow;
strcpy(sparrow.isRinged,"T");
strcpy(sparrow.nameSpecies,"sparrow");
sparrow.birdAgeMonths=4;
sparrow.hom.area=30;
sparrow.hom.height=20;
sparrow.hom.feederquantity=2;
strcpy(sparrow.hom.hasNest,"F");
strcpy(sparrow.gender,"M");
printBird(&sparrow);
return 0;
}
void printBird(struct Bird *bird){
printf("Bird info:\n");
printf("\tIs bird ringed:%s\n", (*bird).isRinged);
printf("\tThe name of the specie:\n",(*bird).nameSpecies);
printf("\tThe birds age is:%d\n",(*bird).birdAgeMonths );
printf("Bird house info:\n");
printf("\tArea of its house is:%d\n",(*bird).hom.area);
printf("\tThe height of its house is:%d\n",(*bird).hom.height);
printf("\tThe quantity of feeders is:%d\n",(*bird).hom.feederquantity );
printf("\tThe house has nest:%s\n",(*bird).hom.hasNest );
printf("\tBird's gender is:%s\n",(*bird).gender );
}
我已经尝试添加任何可能的库(你可以在代码中看到它),但是编译代码时仍然会出现错误。好吧,如果我们在主函数中重新编码函数(使用所有经过编辑的代码),它会正常工作,但我希望它与一个单独的函数一起工作。你能帮我吗?
类型 struct Bird 的范围是函数 main 的外部块范围。
int main(){
struct BirdHome{
int area;
int height;
int feederquantity;
char hasNest[1];
};
struct Bird{
char isRinged[1];
char nameSpecies[50];
int birdAgeMonths;
struct BirdHome hom;
char gender[1];
};
//...
因此在函数 main 之外,类型 struct Bird
未声明且未定义。
然而,在函数 printBird
的定义中,应该在函数 main
之前声明,您试图使用结构的数据成员,尽管在此范围内声明了 struct Bird
in main 未声明且未定义。
void printBird(struct Bird *bird){
printf("Bird info:\n");
printf("\tIs bird ringed:%s\n", (*bird).isRinged);
//..
就是你在函数参数列表中声明了不完整的类型struct Bird
void printBird(struct Bird *bird){
^^^^^^^^^^^
这与在 main 中声明的 struct Bird
没有任何共同之处。
从 main
移动结构定义,使其定义可用于函数 printBird
。然后将函数声明放在函数 main
.
此外,由于结构类型的对象是通过引用传递给函数的,并且在函数中没有被更改,因此您应该使用限定符 const
void printBird( const struct Bird *bird);
注意这个调用
strcpy(sparrow.isRinged,"T");
调用未定义的行为,因为数组 isRinged
不够大,无法存储字符串文字“T”,该字符串文字在内部表示为具有两个元素的字符数组 { 'T', '[=27=]' }
.
你至少应该这样声明
char isRinged[2];
这些语句存在同样的问题
strcpy(sparrow.hom.hasNest,"F");
strcpy(sparrow.gender,"M");
您需要扩大使用的字符数组。