如何修复错误“long *与U32 **不兼容”?

时间:2013-12-13 11:30:55

标签: c++ c type-conversion

我尝试使用以下签名调用函数:

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 个答案:

答案 0 :(得分:7)

您的变量desttemp的类型为long&desttemp会产生long*,您尝试将contour8作为参数dst传递给U32**

long*无法隐式转换为U32**,从而导致您的错误。

你应该desttemp一个U32*(推荐),或者&desttemp投降到U32**(不推荐;只要你不这样做就会引入其他问题)我知道你在做什么。因为我们不知道你的功能是什么/期望你最终需要自己决定哪一种最适合你的情况。

答案 1 :(得分:-4)

在32位系统中,长变量的大小为64位。所以你在32变量中传递64位值很可能会得到错误。 此外,一个简单的建议总是在声明期间初始化所有变量,你没有初始化一些变量和指针,作为程序员,它被认为是不好的做法。干杯.. :)