我遇到了一些我不理解的冲突类型的问题。我想改变之前设定的日期,但这让我很头疼。
int main(){
float any=11;
llegirany(&any);
printf("%f",any);
getch();
}
void llegirany(float * any){
float auxi;
auxi=llegirinterval(1,31);
*any= auxi;
}
float llegirinterval(float n1,float n2){
float aux;
do{
scanf("%f",&aux);
}while(aux>n2 || aux<n1);
return aux;
}
我收到此输出错误:
65 7 D:\ DAM \ PRo \ pruebaconio.c [错误]的冲突类型 'llegirinterval'62 7 D:\ DAM \ PRo \ pruebaconio.c [注意]之前 'llegirinterval'的隐式声明在这里
有人可以帮帮我吗?
答案 0 :(得分:3)
您在声明之前使用了llegirinterval
功能。
您应该在llegirinterval
的定义之前移动llegirany
的定义,或者至少声明 {{ 1}}之前使用它。
检查difference between definition and declaration
在@Olaf评论后编辑。
答案 1 :(得分:1)
在使用之前,尝试向函数 llegirinterval()添加声明。您还应该声明代码中包含的其他函数:
void llegirany(float *any);
float llegirinterval(float n1,float n2);
int main(){
float any=11;
...
void llegirany(float * any){
float auxi;
auxi=llegirinterval(1,31);
*any= auxi;
}
默认情况下,C会将尚未明确键入的任何变量名称的类型视为 int 。所以,当它看到调用时:
llegirany(&any);
在main的第三行,编译器说“aha,一个名为 llegirany 的函数,它返回一个 int 。
稍后,当编译器到达函数的实际函数定义时,它会变得混乱 - 等等,我认为 llegirany 返回 int ,现在你告诉我它返回一个 float 。