2016-11-07 3 views
-2

У меня есть следующие функции на мой код:Почему я не могу использовать символ в качестве параметра функции?

int leepos(char *entrada, char elem) 

который вызывается следующим образом:

leepos(entrada,'y'); 

Для меня это выглядит нормально, но я получаю следующее сообщение об ошибке: [Ошибка] противоречивую типы для «» leepos

Как ни странно, я могу сделать свою работу функции с этими небольшими изменениями:

Определение функции как:

int leepos(char *entrada, char* elem) 

И называя его:

leepos(entrada,"y"); 

я могу заставить его работать правильно, когда я изменить логику, обработанную полукокса для лечения строк.

Похоже, что ошибка заключается в использовании символа в качестве параметра, хотя это выглядит довольно странно. Любая идея, почему это может произойти?

Я даю код, который показывает ошибку на использовании полукокса:

int main() 
{ 
    leepos("hi",'y'); 
    leepos2("hi","y"); 
} 

int leepos(char *entrada, char elem) 
{ 
    return 0; 
} 

int leepos2(char *entrada, char* elem) 
{ 
    return 0; 
} 

Программа работает хорошо, если я удалить leepos строки («привет», «у») ;, ошибка является по-прежнему такой же, как показанный, поэтому я думаю, что это ясно, что ошибка должна быть там.

+5

Ошибка может быть не там, где вы думаете. Пожалуйста, предоставьте [mcve], который показывает проблему, чтобы дать окончательный ответ. – kaylum

+1

В ответ на вопрос в вашем названии: потому что вы делаете что-то неправильно. Остальные из нас могут это сделать. Если бы вы показали достаточный код, у вас уже был бы ответ. , пожимает плечами: – enhzflep

+1

может быть, есть 'int leepos (char * entrada, char * elem);' где-то в вашем файле заголовка. – ymonad

ответ

2

Вам нужно прототип функции перед вызовом:

int leepos(char *entrada, char elem); 

int main() 
{ 
    leepos("hi",'y'); 
} 

int leepos(char *entrada, char elem) 
{ 
    return 0; 
} 

Другой способ поставить все тело функции, прежде чем main (первая строка служит в качестве прототипа тоже).

С C99 вообще не разрешено вызывать функцию, которая не была объявлена. Ошибка, которую вы видели о конфликтующих типах, и различное поведение leepos2, происходит из-за использования правил C89 для того, как работают вызовы функций для незаявленных функций.

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