【问题标题】:Array of structures of function pointers C函数指针结构数组 C
【发布时间】:2018-04-21 12:29:58
【问题描述】:

我正在尝试初始化一个包含函数指针的结构数组:

typedef struct struct_actioncommand {
    char *action;
    void (*command)(my_type);
} type_actioncommand;

为了用函数名初始化每个指针,我使用了这个方法:

static const type_actioncommand g_cmd_tab[] = {
    {"Action1", function1},
    {"Action2", function2},
    {"Action3", function3},
    {NULL, NULL}
};

但它不起作用。 当我尝试使用“gcc”编译时,我收到以下消息:

myfile.c:16:3: 错误:从不兼容的指针类型初始化 [-Werror]
{"Action1", function1},
^
myfile.c:16:3: 错误:(g_cmd_tab[0].command 的初始化附近)[-Werror]
myfile.c:17:3:错误:从不兼容的指针类型初始化 [-Werror]
{"Action2", function2},
^
myfile.c:17:3: 错误:(g_cmd_tab[1].command 的初始化附近)[-Werror]
myfile.c:18:3:错误:从不兼容的指针类型初始化 [-Werror]
{"Action3", function3},
^
myfile.c:18:3: 错误:(g_cmd_tab[2].command 的初始化附近)[-Werror]
cc1:所有警告都被视为错误

每个函数都是根据这个原型定义的:

void function1(my_type *var1);

我现在有点困惑,因为我不知道如何解决我的问题。 有什么想法吗?

【问题讨论】:

  • 你能告诉我们function1等吗?或者至少是他们的原型(声明)?虽然我们更喜欢Minimal, Complete, and Verifiable Example。
  • function1、function2、function3的定义是什么?
  • 此外,这些错误看起来像是来自 GCC,这通常非常适合提供信息说明,例如预期内容和给出的内容。您是否复制粘贴了完整输出,包括此类信息说明?
  • 在结构中,command 的参数是 my_type object,但您为 function1 显示的声明显示参数是 指针 到my_type。不同且不兼容的类型。
  • @Roulians 你读过你粘贴的代码吗?星星很重要。

标签: c arrays pointers structure


【解决方案1】:

在您的结构中,command 成员:

void (*command)(my_type);

具有类型“指向函数的指针,该函数接受my_type 类型的参数并返回void。

你的功能:

void function1(my_type *var1);

具有类型“函数,它接受my_type * 类型的参数并返回void。

函数指针的参数与您分配给它们的函数的参数不匹配。这使得指针不兼容。

要解决此问题,请更改函数指针的类型以匹配分配给它的函数:

void (*command)(my_type *);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多