2013-04-30 157 views
2

我想檢查一個鏈接列表的元素每個持有一個整數,如果一個值已經在裏面。C:衝突類型錯誤

struct ListenElement{ 
    int wert; 
    struct ListenElement *nachfolger; 
}; 

struct ListenAnfang{ 
    struct ListenElement *anfang; 
}; 

struct ListenAnfang LA; 

bool ckeckForInt(int value){ 
    if (LA.anfang == NULL){ 
     return 0; 
    } 
    return checkCurrent(LA.anfang, value); 
} 

bool checkCurrent(struct ListenElement* check, int value){ 
    if (check->wert == value){ 
     return true; 
    } 
    else if (check->nachfolger != NULL){ 
     return checkCurrent(check->nachfolger, value); 
    } 
    else{ 
     return false; 
    } 
} 

我得到一個衝突的類型爲checkCurrent方法,但找不到它。

回答

4

缺少函數聲明。 在C中,您需要完全按照原樣聲明函數。

struct ListenElement{ 
    int wert; 
    struct ListenElement *nachfolger; 
}; 

struct ListenAnfang{ 
    struct ListenElement *anfang; 
}; 

struct ListenAnfang LA; 

//The function declaration ! 
bool checkCurrent(struct ListenElement* check, int value); 

bool ckeckForInt(int value){ 
    if (LA.anfang == NULL){ 
     return 0; 
    } 
    return checkCurrent(LA.anfang, value); 
} 

bool checkCurrent(struct ListenElement* check, int value){ 
    if (check->wert == value){ 
     return true; 
    } 
    else if (check->nachfolger != NULL){ 
     return checkCurrent(check->nachfolger, value); 
    } 
    else{ 
     return false; 
    } 
} 
4

checkCurrent()用於之前它被聲明,或限定的,這導致在隱含函數聲明與int返回類型(這是不一樣的,其具有返回類型bool的函數的定義)產生。添加聲明其首次使用前checkCurrent()

bool checkCurrent(struct ListenElement* check, int value); 

bool ckeckForInt(int value){ 
    if (LA.anfang == NULL){ 
     return false; /* Changed '0' to 'false'. */ 
    } 
    return checkCurrent(LA.anfang, value); 
} 

或之前checkForInt()移動它的定義。