我有一個'Circle'和'Triangle'的結構。我試圖創建兩個函數指針的聯合,指向在兩個結構上運行的兩個函數。我認爲其餘的應該是自我解釋。在Union(C)中存儲函數指針
的代碼如下:
struct Triangle
{
char color;
char shade;
int base;
int height;
};
struct Circle
{
char color;
char shade;
int radius;
};
void drawCircle(struct Circle* x);
float areaCircle(struct Circle* x);
void drawTriangle(struct Triangle *x);
float areaTriangle(struct Triangle* x);
在main()函數:
typedef union uCircle
{
void(*draw)(struct Circle*);
float(*area)(struct Circle*);
}uc;
typedef union uTriangle
{
void(*draw)(struct Triangle*);
float(*area)(struct Triangle*);
}ut;
uc(*vtc[2])(struct Circle*);
vtc[0].(*draw) = &drawCircle;
vtc[1].(*area) = &areaCircle;
ut(*vtt[2])(struct Triangle*);
vtt[0].(*draw) = &drawTriangle;
vtt[1].(*area) = &areaTriangle;
那種遇到錯誤的是這些:
Structs.c:117:9: error: expected identifier before ‘(’ token
vtc[0].(*draw) = &drawCircle;
Structs.c:118:9: error: expected identifier before ‘(’ token
vtc[1].(*area) = &areaCircle;
^
Structs.c:121:9: error: expected identifier before ‘(’ token
vtt[0].(*draw) = &drawTriangle;
^
Structs.c:122:9: error: expected identifier before ‘(’ token
vtt[1].(*area) = &areaTriangle;
看起來像這是我似乎無法識別的一些簡單的語法錯誤。我究竟做錯了什麼?
你爲什麼試圖使用結構這樣的聯合? Union一次只能存儲一個成員。 – askmish 2014-09-25 05:16:16
你打算有'uc(* vtc)(struct Circle *);'聲明一個變量'vtc',它是一個函數指針,返回'ut'並把一個指向'struct Circle'的指針作爲單個參數?因爲那正是你得到的。 *'vtc'和'vtt'都是函數指針。我懷疑這不是你的意圖。 – WhozCraig 2014-09-25 05:16:19
由於繪圖和區域的函數簽名是不同的(void vs float),我不能簡單地創建一個函數指針數組(一種類型)。爲了使它工作,我試圖創建這兩個函數指針的聯合。這個聯合是作爲函數指針的類型。 – Prasad 2014-09-25 05:19:44