创建函数指针结构时指针类型不兼容

Incompatible pointer type when making structure of function pointers

我试图创建一个结构数组,其中包含一个字符串和一个函数指针,但是当我编译时,我收到一条警告,指出我从不兼容的指针类型进行了初始化。

我不知道为什么(对不起,如果我听起来很无知,我对 C 编程还很陌生)。

 typedef struct
{
    char Player1[2], Player[2], **gameGrid;
    int height,width;
    int moveNum, player1Num, player2Num;
    bool player1Win, player2Win;
}Game;

typedef int (*pointer_func)(Game *);

typedef struct
{
   char *funcName;
   pointer_func *f;
}userFunc;

int save(Game *struc);
int load(Game *struc);
int move(Game *struc);
int quit(Game *struc);
void free_grid(Game *struc);


int main(){
//initialised variables 

userFunc Name_arr[] = {
    {"save",save},
    {"load",load},
    {"quit",quit},
    {"move",move}
};

被引用的四个函数如下:

int save(Game *struc)
{
char *str, *inputString, *writeString;
FILE *fp;
int nextPlayer;
int maxRead = 20;
bool DIRresponse;

while(true)
{
    printf("Please provide a file name (20 characters max): ");
    inputString = input_String(inputString, maxRead, stdin);

    if((DIRresponse = check_Directory(inputString)) == true){
        printf("That name already exists, choose another\n");
        continue;
    }
    else
        break;  
}

if(struc->moveNum % 2 == 0)
    nextPlayer = struc->player1Num;
else
    nextPlayer = struc->player2Num;

sprintf(str,"%s.txt",inputString);
fp = fopen(str,"w");

sprintf(writeString, "%d %d %d %d %d",  nextPlayer, struc->height,
            struc->width, struc->moveNum, struc->moveNum);
fprintf(fp,writeString);

fclose(fp);

return 0;
}

int move(Game *struc)
{
 return 1;
}

int load(Game *struc)
{
 return 1;
}

int quit(Game *struc)
{
 free_grid(struc);
 exit(EXIT_SUCCESS);
}

您的指针级别不匹配:

typedef int (*pointer_func)(Game *); << Pointer type

typedef struct
{
  char *funcName;
  pointer_func *f;              << Pointer to a pointer type.... OOPS
}userFunc;

制作 *f -> f 它应该可以工作。