函数指针作为结构的静态成员

时间:2012-10-13 07:47:34

标签: c++ visual-studio-2010

请查看以下结构的定义:

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'的总和。

现在要为静态成员分配内存,我们必须明确地这样做。静态成员对角线的分配很好。 但是我应该在这个地方给出什么:(应该怎么做),以便函数指针的内存分配正常。

希望我的解释清楚。请帮帮我。

3 个答案:

答案 0 :(得分:2)

最简单的方法是输入一个函数并在那里使用它:

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

但你也可以这样做     int(* rectangle :: ptr)(int,int)

答案 1 :(得分: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;

答案 2 :(得分: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