2016-03-01 137 views
0

我遇到了一些衝突類型的問題,我不明白。我想改變之前設置的日期,但這讓我很頭疼。衝突類型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://stackoverflow.com/questions/34009277/c-conflicting-type-bug –

回答

3

您在使用函數llegirinterval之前聲明瞭它。

你應該移動定義的llegirintervalllegirany或至少定義之前聲明llegirinterval使用數據之前。

檢查difference between definition and declaration

EDITED以下@Olaf評論。

+1

事實上,沒有函數原型,也沒有'#include'文件。 –

+1

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

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); 

在主第三行,編譯器說:「啊哈,一個名爲llegirany函數返回一個INT

後來,當。編譯器獲取到實際功能定義的功能,它會很困惑 - 等一下,我認爲llegirany返回INT,現在你告訴我它返回浮動

+1

你應該在main()之前添加* both *函數原型,因爲'main()'調用另一個函數。在源代碼中,每一個都在調用它的那個之下。 –

+0

@天氣風向標 - 正確。 –