如何修复"'一元'类型参数无效?

How do I fix "invalid type argument of 'unary'?

本文关键字:无效 类型参数 一元 何修复      更新时间:2023-10-16

我一直在运行这个编译器错误:

'unary'类型参数无效

我对"一元"是什么做了一些研究,得到了像+,-.&这样的运算符,所以我猜我在某个地方做了一个错误的运算符。我只包括有错误的代码的一部分,因为整个代码大约2000行长。也有其他错误的代码,但他们是相同的,所以我认为,如果我能得到什么是错误的这一个的理解,我应该能够找出那些。

static int cmp_bk( const void *ap, const void *bp)
{
    int a; 
    int b;
    dynamic_cast<const struct bk>(*a)=ap;
    dynamic_cast<const struct bk>(*b)=bp;
    if (a->hash < b->hash) return -1;
    if (a->hash > b->hash) return 1;
    return (int)a->bk - (int)b->bk;
}
我得到的确切错误是:

'unary *'类型参数无效

,它被设置为两行

dynamic_cast<const struct bk>(*a)=ap;
dynamic_cast<const struct bk>(*b)=bp;

没有适用于int的一元*运算符,因此*a没有意义。

我相信你可能想要的是一个指向bk的指针:

bk * pa;
bk * pb;
pa = dynamic_cast<bk*>(ap);
pb = dynamic_cast<bk*>(bp);

这只是一个疯狂的猜测,因为我不知道你的bk类是如何定义的。现在还不清楚你是否真的想要一个动态演员。可能你真正需要的是重新解释强制转换。

我不明白你想返回什么,所以如果你解释一下,我可能会说得更多。

abint s, *a应该对整数做什么?此外,你的cast看起来很奇怪,我假设你想要reinterpret_cast指向bk的指针。