函数指针数组中的错误

时间:2018-03-25 07:39:00

标签: c function-pointers

我正在尝试学习这个CLI程序,但面临一个函数指针数组的问题。我正在尝试使用示例代码并使用相同的代码来更好地了解概念。

它是一个语法错误,我可以追踪这里的错误。

  

(* func_ptr [input.opInput])();

我收到错误

  

“错误:被调用的对象不是函数或函数指针”。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

enum operation {ADD,
        SEARCH,
        LIST,
        DELETE,
        ERROR};

struct data{
    int id;
    char name[20];
    char arch[20];
    float rf_freq;
};    //This struct will be dynamically created

struct command {
    enum operation opInput;
    int id;
    char name[20];
    char arch[20];
    float rf_freq;
};

//===========Function proto typing===============
void parseInput(char *inputStr,struct command *cmd);
void createNode(struct data *node);
void deleteNode(struct data *node);
//List of command input supported
void add();
void search();
void list();
void delete();
//===============================================


void (*func_ptr[4])={add,search,list,delete};

int main(void){

struct command input;
char cliInput[80];

printf("Welcome to CLI interface \n Please insert valid command\n");
printf("Valid input format is---->");
printf("wsn> command name arch rf_frequency\n");
printf("--------------------------------------------------------\n");

while(1){
    printf("wsn>");
    fgets(cliInput,80,stdin);
    parseInput(cliInput,& input);
    (*func_ptr[input.opInput])();    //ERROR
    }//end of while 1
}//end of main

void parseInput(char *inputStr,struct command *cmd){
char *tknstrs[6];
int ii=0;

tknstrs[ii]=strtok(inputStr," \n");
while(tknstrs[ii]){
    tknstrs[++ii]=strtok(NULL," \n");
}

if(strcmp(tknstrs[0],"add")==0)
    cmd->opInput=ADD;
else if(strcmp(tknstrs[0],"search")==0)
    cmd->opInput=SEARCH;
else if(strcmp(tknstrs[0],"list")==0)
    cmd->opInput = LIST;
else if(strcmp(tknstrs[0],"delete")==0)
    cmd->opInput = DELETE;
else
    cmd->opInput = ERROR;

cmd->id=atoi(tknstrs[1]);
strcpy(cmd->name,tknstrs[2]);
strcpy(cmd->arch,tknstrs[3]);
cmd->rf_freq = atof(tknstrs[4]);
}//end of parseInput function

void add(){
}
void search(){
}
void list(){
}
void delete(){
}

感谢您的努力,感谢您。

1 个答案:

答案 0 :(得分:3)

您使用的是错误的声明:

void (*func_ptr[4])={add,search,list,delete};

应该是

void (*func_ptr[4])()={add,search,list,delete};
-------------------^^ You need also the type of the parameters or empty

请注意,您无需指定数组的元素数(可以避免键入4)

另外,如果函数不带参数,则更喜欢使用void

void (*func_ptr[])(void)={add,search,list,delete};

并更改原型:

void add(void);