在具有相同参数类型的结构体中使用函数指针

4

我正在尝试创建一个结构体,其中包含一个函数指针,该函数以相同的结构体作为参数。目前我有以下代码。

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(sharedData*);
};

我遇到了如下错误:

错误:在“*”标记之前缺少“)”

还有如下警告:

 warning: no semicolon at end of struct or union 
 warning: useless storage class specifier in empty declaration

我在这里做错了什么?

2
你是不是想写 struct sharedData*? - Artyom Shalkhakov
1个回答

8
问题在于,当您使用typedef struct引入一个不需要struct关键字的新struct时,您无法在struct的声明中引用typedef命名。相反,您需要使用完整的结构名称。例如:
typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
};

此外,您的typedef语句目前无效,因为您没有指定一个名称来调用struct sharedData。修复此问题的一种方法如下:
typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
} sharedData;

现在,你可以通过完整名称struct sharedData或简写名称sharedData来引用结构体。


2
去掉最后的下划线,它只是丑陋和无用的。在结构体标签和typedef中使用相同的名称是完全有效的。 - R.. GitHub STOP HELPING ICE
@R..- 太酷了!我不知道这个。我会更新我的原始帖子。 - templatetypedef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接