2012-10-13 55 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)