2011-02-04 43 views
3

我正在尝试使一个具有函数指针的结构具有相同结构作为参数的函数。我现在有这个。具有相同参数类型的结构中的函数指针

error: expected ‘)’ before ‘*’ token

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 *呢? – 2011-02-04 05:39:57

回答

6

的问题是,当你使用typedef struct引入新struct不需要的struct关键字,你不能指typedef -ed名struct的声明中。相反,您需要使用结构的全名。例如:

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

此外,因为你没有给一个名称,通过该呼叫struct sharedDatatypedef语句是当前无效。解决这一问题将是如下的一种方法:现在

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

,您可以通过全名struct sharedData或名字的缩写sharedData指的是结构。

+2

删除最后的下划线;它只是丑陋而无用。对struct标签和typedef使用相同的名称是完全有效的。 – 2011-02-04 05:43:28

相关问题