2013-12-13 25 views
-1

我嘗試調用具有以下簽名的函數:如何修復錯誤「長*與U32 **不兼容」?

I32 contour8(image *a, I32 x0, I32 y0, I32 dir, I32 thr, U32 lng, U32 **dst); 

使用此代碼:

int posx = 100, posy = 100, dx = 300, dy = 300; 
long length = 5000; 
int threshold = 125; 
int lx, x0 = 0, y0 = 0; 
int res1 = 0, res2 = 0, *rlc, *input, i; 
long dest1, dest2, desttemp, addr; 
char c; 
image Area; 

desttemp = dest1; 
res1 = contour8(&Area, x0, y0, ~2, threshold, length, &desttemp); 

但是當編譯我收到以下錯誤:

error argument of type "long *" is incompatible with parameter of type "U32 **" 

是什麼原因造成這個錯誤?

+2

爲什麼有4人投票結束了這個?這個問題不是脫離主題,因爲海報並不是要求代碼。如果你只是認爲問題不好,那麼正確的做法是反對投票,而不是接近投票。不要濫用您的聲譽特權。 – Lundin

+0

我同意。這個問題很糟糕,應該重新編寫。也許是因爲這個原因而關閉,但它不是主題, – mjs

回答

7

您的變量desttemp的類型爲long&desttemp結果爲long*,您嘗試傳遞給contour8作爲參數dst,該類型的類型爲U32**

long*不會隱式轉換爲U32**這會導致您的錯誤。

你應該要麼使desttemp一個U32*(推薦),或投&desttempU32**(不推薦,這會引入其他問題,只要你不知道你在做什麼)。由於我們不知道你的功能是什麼/你期望你最終需要決定哪一個適合你的情況。

-4

在32位系統中,長變量的大小是64位。所以你在32位變量中傳遞一個64位的值可能會導致錯誤。 此外,一個簡單的建議總是在聲明期間初始化所有變量,而不是初始化一些變量和指針,作爲程序員,它被認爲是不好的做法。乾杯.. :)

+0

對於LLP64平臺(例如Windows),sizeof(long)== 8'不是真的。 –

+3

問題是傳遞指向數字的指針而不是指向某個緩衝區的指針。 –

+1

此外,如果你知道你在做什麼,不明確地初始化變量不一定是壞習慣。 – Lundin

相關問題