2015-10-23 175 views
0

我得到的錯誤,當「指定不兼容的類型時,從類型類型‘memstruct’‘詮釋’」用C以下行:不兼容的類型分配從類型類型「memstruct」「詮釋」

result1 = getValueFromBind(interpret(t->ptr1));. 

RESULT1和函數的聲明如下:

memstruct result1; 
memstruct getValueFromBind(memstruct bind); 

此外,memstruct函數定義如下: 的typedef工會常數{ INT INTVAL; char * strval; }常量; typedef struct memstruct int type; int type; 常數值; } memstruct;

編輯:getValueFromBind函數返回一個簡單的檢查後的綁定或NULL。 解釋返回一個memstruct。此外,顯示在分配在C

繼錯誤是最低限度的例子(@gsamaras):http://ideone.com/Rb8ZCd

由於DSH回答了這個問題,在我的程序

+0

在函數調用,這是什麼 - '解釋(T-> PTR1)'?它返回什麼(假設它是一個函數)? – ameyCU

+2

爲什麼不顯示***完整的最小示例*** miney ???? :/:/:/ -1直到你這樣做。 – gsamaras

+0

是的,我的猜測'interpret()'不會返回'memstruct'類型。 –

回答

6

你缺少forward declaration解決的錯誤您的功能getValueFromBind()。在C中,由於歷史原因,未聲明的函數被假定爲返回int類型。在使用函數之前聲明函數的prototype,然後編譯器將知道正確的返回類型。

+0

@ameyCU你是正確的,OP沒有顯示足夠的代碼來查看原型的缺失。不過,我根據我對這個特定錯誤信息的經驗推斷它。 – dsh

+1

將upvote爲該dsh。我必須先看到這個例子。 – gsamaras

+0

@gsamaras謝謝。 :) – dsh

2

您使用的功能,main()知道它之前,這樣你就可以轉發聲明它是這樣的:

#include <stdio.h> 

typedef struct memstruct{ 
    int type; 
}memstruct; 

memstruct interpret(memstruct t); // forward declaration 

int main(){ 
    memstruct t1,t2; 
    t1.type = 1; 
    t2 = interpret(t1); 
    return 1; 
} 

memstruct getValueFromBind(memstruct bind){ 
    return bind; 
} 

memstruct interpret(memstruct t){ 
    memstruct result1; 
    result1 = getValueFromBind(t); 
    return result1; 
} 

或者您也可以將整個實施interpret()main()之前。但是,它應該在struct之後,因爲您在函數中使用它。

你可能想看看這個:Function Declaration and Function Prototypes

+1

謝謝,爲了指出簡約的例子,從下次開始就會確定它。 – Vishnu

+0

不客氣@毗溼奴。我可能對你有點苛刻,所以我現在對你最高的問題讚不絕口,對不起! :) – gsamaras