2012-02-04 38 views
2

我有與採取不同類型的參數2層初始化劑的功能的結構:Ç衝突的類型使用不同的參數函數

struct myStruct; 
typedef struct myStruct *myStruct; 

INFNumber *myStructMake(long long arg); 
INFNumber *myStructMake(char *arg); 

我得到第二個聲明一個conflicting types for 'myStructMake'錯誤。 C不能擁有兩個同名的函數,它們採用不同的參數?還是因爲其他原因?

+2

C不是C++ - 它沒有函數重載。 – 2012-02-04 21:37:45

回答

9

是C不能夠有2種相同名稱的功能,這需要 不同的參數

這是正確的,沒有超載。您必須使用不同的名稱或選擇其他方案(如傳遞其他參數)。

+1

例如,處理自己的名字 - 查找名字。 – QuentinUK 2012-02-04 21:32:13

0

處理不同的數據類型,最好的辦法需要在相同的結構類型是做這樣的事情:

struct s_my_struct 
{ 
    void *data; 
    char data_type; 
} 

有:

#define DATA_TYPE_LONGLONGP 'm' 
#define DATA_TYPE_CHARP 's' 

,並使用這樣的:

if (mystruct.data_type == DATA_TYPE_CHARP) 
{ 
    // use of ((char*)mystruct.data) 
} 
else if (mystruct.data_type == DATA_TYPE_LONGLONG) 
{ 
    // use of ((long long*)mystruct.data) 
} 

要小心,因爲你總是要使用一個指針而不是平坦的類型,因爲結構存儲pointer-si ze數據。

+0

我實際上並沒有實際存儲初始化參數,所以我實際上並不需要將它保存在一個'void *'中以及它的類型。給定的值被處理成完全不同的結構,並且不被存儲。 – Greg 2012-02-04 21:40:24

+0

對不起,我不會從你給的4行代碼中得到這個... – Eregrith 2012-02-04 21:43:12

+0

我明白這一點。 (不是我誰低估了你) – Greg 2012-02-04 21:49:50