2012-10-13 53 views
0

的靜態成員請看看下面的結構的定義:函數指針作爲結構

struct rectangle 
{ 
    int len,bre; 
    static int diagonal; 
    static (int) (*ptr) (int,int); 
}; 

int rectangle::diagonal; 
rectangle::ptr; // (WHAT SHOULD COME HERE) 

rectangle r1,r2; 

喜的朋友,我在這裏定義的結構。我們知道'r1'或'r2'的大小隻是成員len和'bre'的總和。

我們爲靜態成員我們必須明確地去做分配內存。靜態成員對角線的分配情況良好。 但我應該放棄的地方:(WHAT應該來這裏),以便爲函數指針內存分配罰款。

希望我對你的解釋很清楚。請幫助我。

+0

你在結構應該用什麼的DECL。 (並且你可以在前面的'(int)',btw)周圍丟失parens。 – WhozCraig

+0

'int(* rectangle :: ptr)(int,int);' –

回答

1

下面是正確的方法:

struct rectangle 
{ 
... 
    static int (*ptr) (int,int); 
     // ^^^ no braces needed 
}; 

int (rectangle::*ptr) (int, int); 
// ^^^^^^^^^^^^^^ defining a function pointer 

每當有到函數指針,使typedef並使用它相關的一個困惑:

typedef int (*fptr) (int,int); 
struct rectangle 
{ 
    static fptr ptr; 
}; 

fptr rectangle::ptr; 
+0

我發現這個答案非常有用。非常感謝。但不能使用typedef來實現嗎? – user655298

+0

@ user655298,我答案中的第一個例子是沒有'typedef'。只是'typedef'是在這裏做的最好的方式。 – iammilind

1

嘗試:

struct rectangle 
{ 
    int len,bre; 
    static int diagonal; 
    static int (*ptr) (int,int); 
}; 

int rectangle::diagonal; 
int (*rectangle::ptr)(int,int) = NULL; 

rectangle r1,r2 
+0

非常感謝您的回答。我因爲你而學到了一件新事物! – user655298

2

最簡單的方法是鍵入一個函數並在那裏使用它:

typedef int (*MyFunction) (int,int); 
struct rectangle 
{ 
    ... 
    static MyFunction ptr; 
}; 
MyFunction rectangle::ptr = /*initialize it here*/ 

但你也可以做到這一點作爲 INT(*矩形:: PTR)(INT,INT)