2016-03-01 3 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 до Объявление it.

Вы должны переместить в и е llegirinterval до определения из llegirany или, по крайней мере объявить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()', так как 'main()' вызывает тот, который вызывает другой. В исходном коде каждый ниже того, который его вызывает. –

+0

@ Weather Vane - Правильно. –

Смежные вопросы