Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 移植C->;C++;,在未命名的联合中访问结构时遇到问题_C++_C_Porting_Unions_Forward Declaration - Fatal编程技术网

C++ 移植C->;C++;,在未命名的联合中访问结构时遇到问题

C++ 移植C->;C++;,在未命名的联合中访问结构时遇到问题,c++,c,porting,unions,forward-declaration,C++,C,Porting,Unions,Forward Declaration,我一直在研究移植Marcel的简单国际象棋程序 从C到C++。我从未与工会合作过,更不用说工会内部的结构了。 我列出的最上面的部分是工会宣言。(所有代码都在一个.c文件中) 除了C++教科书,我还搜索和阅读了一些指南,但我还没有深入了解这是如何固定的。我不确定什么是“远期信用违约” 也不是我应该在什么背景下看待这个问题 我的编译选项是 g++-ansi-Wall-O2-pedantic-o mscp-mscp.cpp 这些部分是给出错误的行的示例: 错误:“const struct cmp_bk

我一直在研究移植Marcel的简单国际象棋程序 从C到C++。我从未与工会合作过,更不用说工会内部的结构了。 我列出的最上面的部分是工会宣言。(所有代码都在一个.c文件中)

除了C++教科书,我还搜索和阅读了一些指南,但我还没有深入了解这是如何固定的。我不确定什么是“远期信用违约” 也不是我应该在什么背景下看待这个问题

我的编译选项是

g++-ansi-Wall-O2-pedantic-o mscp-mscp.cpp

这些部分是给出错误的行的示例:

错误:“const struct cmp_bk(const void*,const void*)::bk”的转发声明

错误:无效使用不完整类型“const struct cmp_bk(const void*,const void*)::bk”


if(tt->depth>=深度){
如果(tt->flag>=0)alpha=MAX(alpha,tt->score);//此处出错
if(tt->flag score);//此处出错
如果(alpha>=beta)返回tt->分数;
}
最佳移动=tt->move&07777;

看起来您在代码前面的某个地方声明了
结构bk
。也

struct tt                       *tt;
将产生错误,因为您试图声明与struct同名的变量(两者都称为
tt
)。由于此错误,变量未正确声明,因此出现其他错误。事实上,您的许多问题似乎都源于将数据类型命名为变量(例如
bk
tt
)。如果可以,请尝试更改数据类型的名称或使其匿名


顺便说一句,联合体内部的结构可能是匿名的,除非它们在其他地方使用

这只是在谷歌的“前进宣言”上出现的众多链接之一。请参阅此问题的公认答案,以获取解释,或从搜索中找到的任何其他答案。
    static int cmp_bk(const void *ap, const void *bp)
    {
            const struct bk *a = ap; //ERROR HERE
            const struct bk *b = bp; //ERROR HERE

            if (a->hash < b->hash) return -1; //ERROR HERE
            if (a->hash > b->hash) return 1; //ERROR HERE
            return (int)a->move - (int)b->move; //ERROR HERE
    }
static int search(int depth, int alpha, int beta)
{
        int                             best_score = -INF;
        int                             best_move = 0;
        int                             score;
        struct move                     *moves;
        int                             incheck = 0;
        struct tt                       *tt; //ERROR HERE
        int                             oldalpha = alpha;
        int                             oldbeta = beta;
        int                             i, count=0;
               if (tt->depth >= depth) {
                    if (tt->flag >= 0) alpha = MAX(alpha, tt->score); //ERROR HERE
                    if (tt->flag <= 0) beta = MIN(beta,  tt->score); //ERROR HERE
                    if (alpha >= beta) return tt->score;
            }
            best_move = tt->move & 07777;      
struct tt                       *tt;