2011-02-04 61 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

相關問題