好的,所以我重新发布此内容,但也包括更新,可能违反规则,但我找不到任何其他方法。有人要求我的课程描述,我无法弄清楚如何添加它,所以如果有人可以帮我弄清楚如何编辑我的帖子,也将非常感激。 因此,在使用此代码
时,我遇到了错误“'unary *'的无效类型参数”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;
所以有人告诉我用reinterpret_cast而不是动态重写它,但一直得到“未检查”的变量,所以我只是开始做一些工作让事情发生,所以我知道这是错的,这是我目前的结果新错误“预期在'之前的初级表达' - &gt;'令牌“为所有' - &gt;'令牌。
static int cmp_bk( const void *ap, const void *bp)
{
class bk {};
class pa {};
class pb {};
class a {};
class b {};
bk * pa;
bk * pb;
ap = reinterpret_cast<bk*>(pa);
bp = reinterpret_cast<bk*>(pb);
if (a -> hash < b -> hash) return -1;
if (a->hash > b->hash) return 1;
return (int)a->bk -int)b->bk;
}
我的bk类也在静态联合中,所以这里就是全部。
/* Transposition table and opening book share the same memory */
static union {
#define TTABLE (core.tt)
struct tt { /* Transposition table entry */
unsigned short hash; /* - Identifies position */
short move; /* - Best recorded move */
short score; /* - Score */
char flag; /* - How to interpret score */
char depth; /* - Remaining search depth */
} tt[CORE];
#define BOOK (core.bk)
struct bk { /* Opening book entry */
unsigned long hash; /* - Identifies position */
short move; /* - Move for this position */
unsigned short count; /* - Frequency */
} bk[CORE];
} core;
//#define TTABLE (core.tt)
//#define BOOK (core.bk)
希望这是人们需要的所有信息,正如我所说的,如果有人也可以帮我编辑我的帖子,那么我就不必再制作一个值得高度赞赏的新帖子了。并感谢大家的帮助,这些帮助在最后一篇文章中得到了帮助,并在这篇新文章中提供了帮助。
答案 0 :(得分:0)
在这一行:
dynamic_cast<const struct bk>(*a)=ap;
您正在尝试取消引用int。只有指针和具有重载运算符*的类才能被取消。
答案 1 :(得分:0)
直接回答您的问题:
const bk& a_bk = *reinterpret_cast<const bk*>(ap);
const bk& b_bk = *reinterpret_cast<const bk*>(bp);
其次,代码:
if (a -> hash < b -> hash) return -1;
if (a->hash > b->hash) return 1;
return (int)a->bk -int)b->bk;
可以缩减为:
if ( a_bk.hash < b_bk.hash ) return -1;
else if (a_bk.hash > b_bk.hash ) return 1;
else return 0;
或者只是:
return a_bk.hash - b_bk.hash;
第三,使用类型安全的排序函数而不是使用不安全的C风格排序函数:
int sort_bk_by_hash( const bk& lhs, const bk& rhs ) {
return rhs.hash - lhs.hash;
}
// then use like so:
set<bk,sort_bk_by_hash> data;
// or:
vector<bk> data;
sort( data.begin(), data.end(), sort_bk_by_hash );
第四,如何在没有某种类型字段的情况下激活联合内部的哪个结构?可以从哈希值推断出类型吗?
最后,您可以通过boost::variant完成任何操作。