2016-11-07 141 views
-2

我有我的代碼如下功能:爲什麼我不能使用char作爲函數的參數?

int leepos(char *entrada, char elem) 

這是被稱爲方式如下:

leepos(entrada,'y'); 

對於我來說,它看起來不錯,但我得到以下錯誤:[錯誤]發生衝突類型「leepos」

奇怪的是,我可以讓我的功能工作,這些小改動:

定義功能:

int leepos(char *entrada, char* elem) 

而且與調用它:

leepos(entrada,"y"); 

我可以使它正常工作,一旦我改變處理炭處理字符串的邏輯。

它看起來像錯誤然後在使用char作爲參數,但它看起來很奇怪。任何想法爲什麼會發生這種情況?

我給,顯示錯誤代碼是用字符上:

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該項目工程尼斯(「喜」,「Y」);,錯誤的是仍然與所示相同,所以我認爲這表明錯誤必須在那裏。

+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規則來調用對未聲明函數的函數行爲。

相關問題