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

C++ “如何修复错误”;long*与U32**“不兼容?”;?,c++,c,type-conversion,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, *inpu

我尝试调用具有以下签名的函数:

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 **"

导致此错误的原因是什么?

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

long*
不能隐式转换为
U32**
,这将导致您的错误


您应该将
destemp
a
U32*
(推荐),或者将
&destemp
转换为
U32**
(不推荐;只要您不知道自己在做什么,这将引入其他问题)。由于我们不知道您的函数的用途/期望,您最终需要自己决定哪一个最适合您的情况。

在32位系统中,长变量的大小是64位。所以,如果您在32个变量中传递64位值,则很可能会出现错误。
此外,一个简单的建议总是在声明期间初始化所有变量。您没有初始化某些变量和指针,作为一名程序员,这被认为是一种不好的做法。干杯……)

sizeof(long)==8不适用于LLP64平台(例如Windows)。问题是传递指向数字的指针,而不是指向某个缓冲区的指针。此外,不显式初始化变量不一定是坏做法,如果你知道你在做什么。向下投票,因为这实际上并没有解决指针对指针的问题。为什么有4个人投票来关闭这个?这个问题并不是离题,因为海报并不是在问代码。如果你只是认为一个问题不好,正确的做法是否决投票,而不是接近投票。不要滥用你的名誉特权,我同意。这个问题很糟糕,应该改写。也许是因为这个原因才结束的,但这并不是离题,