我正在尝试创建一个结构,该结构具有一个函数的函数指针,该函数采用与参数相同的结构。我现在有这个。
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
我在这里做错了什么?
答案 0 :(得分:6)
问题在于,当您使用typedef struct
引入不需要struct
关键字的新struct
时,您无法引用typedef
- struct
声明中的ed名称。相反,您需要使用结构的全名。例如:
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
来引用结构。