【问题标题】:How to fix error "long* is incompatible with U32**"? [closed]如何修复错误“long* 与 U32** 不兼容”? [关闭]
【发布时间】:2014-01-01 03:51:04
【问题描述】:

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

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

是什么导致了这个错误?

【问题讨论】:

  • 为什么有 4 个人投票关闭这个?这个问题不是题外话,因为张贴者没有要求代码。如果您只是认为某个问题不好,那么正确的做法是投反对票,而不是关闭投票。不要滥用您的声誉特权。
  • 我同意。这个问题不好,应该改写。也许因为这个原因而关闭,但它不是题外话,

标签: c++ c type-conversion


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • sizeof(long) == 8 不适用于 LLP64 平台(例如 Windows)。
    • 问题在于传递一个指向数字的指针而不是指向某个缓冲区的指针。
    • 此外,如果您知道自己在做什么,不显式初始化变量不一定是不好的做法。
    • 投反对票,因为这实际上并没有解决指针对指针与指针的问题。
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2016-07-15
    • 2020-06-11
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    相关资源
    最近更新 更多