期望')'在带有函数指针的'*'标记之前

时间:2012-02-20 02:45:16

标签: c function pointers parameters struct

这是代码:

typedef struct {
    void (*drawFunc) ( void* );
} glesContext;

void glesRegisterDrawFunction(glesContext *glesContext, void(drawFunc*)(glesContext*));

对于最后一行,我收到错误消息:“预期')'''''令牌”

为什么?

4 个答案:

答案 0 :(得分:5)

在你的struct中执行函数指针的正确方法(因此很多人都错了)。

然而,你在函数定义中交换了drawFunc*,这是编译器抱怨的一个原因。另一个原因是您使用相同的标识符作为类型和变量。您应该为两个不同的事物选择不同的标识符。

请改用:

void glesRegisterDrawFunction(glesContext *cntxt, void(*drawFunc)(glesContext*));
                                                       ^^^^^^^^^
                                                       note here

答案 1 :(得分:5)

一种解决方案是添加一个指向函数typedef的指针,如下所示:

typedef struct {
    void (*drawFunc) ( void* );
} glesContext;

// define a pointer to function typedef
typedef void (*DRAW_FUNC)(glesContext*);

// now use this typedef to create the function declaration
void glesRegisterDrawFunction(glesContext *glesContext, DRAW_FUNC func);

答案 2 :(得分:0)

您可能想尝试将其放在括号中:glesContext * glesContext。

答案 3 :(得分:0)

我不确定你的代码是做什么的,但如果你只想让它编译,请尝试

void glesRegisterDrawFunction(glesContext *glesContext, void (*drawFunc)(glesContext*));