在制作函数指针结构时,指针类型不兼容

时间:2018-01-26 07:18:35

标签: c pointers typedef

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

我不知道为什么(对不起,如果我听起来无知,我对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);
}

1 个答案:

答案 0 :(得分:4)

指针级别不匹配:

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

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

制作*f - &gt; f它应该有用。