2012-05-21 20 views
2

我有下面的函數聲明的頭文件:參數不匹配的原型錯誤的Linux

extern getEmailDetailsResult * getemaildetails_5(getEmailDetailsInput *, CLIENT *); 

在我的.C文件,函數定義是

getEmailDetailsResult* getemaildetails_5(inputParams, rqstp) 
    getEmailDetailsInput *inputParams; 
    struct svc_req *rqstp; 

當我編譯我的在Unix下編程,編譯成功。但在Linux(gcc 4.1.2)中,出現以下錯誤"error: argument ârqstpâ doesnât match prototype"。具有函數原型的.h文件在編譯期間由OS生成。 Linux中可能導致錯誤的原因是什麼?

+2

如何聲明CLIENT?如果將'extern'原型中的'CLIENT'更改爲'struct svc_req',Linux構建會停止抱怨嗎? –

+0

嗨邁克爾,聲明函數原型的頭文件是在編譯過程中由rpcgen生成的「api.h」。因此,我想不可能改變原型定義。在Unix中,由rpcgen生成的api.h包含函數原型爲「extern getEmailDetailsResult * getemaildetails_5();」並且程序編譯沒有錯誤。 – Blackforest

+1

即使生成了這些文件,您也可能想要安排嘗試該建議(或者查看「CLIENT」是什麼)。瞭解實際情況是確定如何最好地解決問題的第一步。根據你的評論,你可能需要另一種方法來弄清楚爲什麼在Unix系統上'api.h'只有一個函數聲明(嚴格來說,它不是一個原型),而在Linux上生成一個完整的原型。第三件要看的事情是看看在Linux上你是否可以說服系統使用ANSI/ISO風格的參數聲明來生成函數定義。 –

回答

1

它看起來像struct svc_req *指針不等於CLIENT *指針。

+0

嗨Jens,但.h文件在編譯過程中由rpcgen生成。 – Blackforest

+1

好吧,那可能是這樣,但爲了找到根本原因,您必須確定「CLIENT」是什麼類型。如果它不同於'struct svc_req'這就是你的問題。您可能會錯誤地使用rpcgen,但這遠遠不可能從遠方診斷出來。 – Jens

0

你有兩個指針,struct svc_req *CLIENT *。你會得到這個錯誤,因爲兩個指針都指向不同的類型。那是struct svc_reqCLIENT不一樣,所以這兩個指針是不兼容的。