冲突类型C

冲突类型C

问题描述:

我遇到了一些冲突类型的问题,我不明白。我想改变之前设置的日期,但这让我很头疼。冲突类型C

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 [Error] conflicting types for 'llegirinterval' 62 7 D:\DAM\PRo\pruebaconio.c [Note] previous implicit declaration of 'llegirinterval' was here

有人可以帮我吗?

+0

可能的重复:http://*.com/questions/34009277/c-conflicting-type-bug –

您在使用函数llegirinterval之前声明了它。

你应该移动定义的llegirintervalllegirany或至少定义之前声明llegirinterval使用数据之前。

检查difference between definition and declaration

EDITED以下@Olaf评论。

+1

事实上,没有函数原型,也没有'#include'文件。 –

+1

在_definition_很好之前使用函数。但是你需要它的_declaration_。 – Olaf

在使用它之前,尝试向函数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); 

在主第三行,编译器说:“啊哈,一个名为llegirany函数返回一个INT

后来,当。编译器获取到实际功能定义的功能,它会很困惑 - 等一下,我认为llegirany返回INT,现在你告诉我它返回浮动

+1

你应该在main()之前添加* both *函数原型,因为'main()'调用另一个函数。在源代码中,每一个都在调用它的那个之下。 –

+0

@天气风向标 - 正确。 –