我尝试使用以下签名调用函数:
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 **"
导致此错误的原因是什么?
答案 0 :(得分:7)
您的变量desttemp
的类型为long
。 &desttemp
会产生long*
,您尝试将contour8
作为参数dst
传递给U32**
。
long*
无法隐式转换为U32**
,从而导致您的错误。
你应该desttemp
一个U32*
(推荐),或者&desttemp
投降到U32**
(不推荐;只要你不这样做就会引入其他问题)我知道你在做什么。因为我们不知道你的功能是什么/期望你最终需要自己决定哪一种最适合你的情况。
答案 1 :(得分:-4)
在32位系统中,长变量的大小为64位。所以你在32变量中传递64位值很可能会得到错误。 此外,一个简单的建议总是在声明期间初始化所有变量,你没有初始化一些变量和指针,作为程序员,它被认为是不好的做法。干杯.. :)