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 SHOULD COME HERE) 。

私の説明があなたにとって明確であることを願っています。私を助けてください。

4

3 に答える 3

2

最も簡単な方法は、関数を型定義してそこで使用することです。

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

しかし、 int (*rectangle::ptr)(int,int) のようにすることもできます

于 2012-10-13T07:58:36.740 に答える
1

以下が正しい方法です。

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

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

関数ポインターに関連する混乱がある場合はいつでも、 a を作成しtypedefて使用します。

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

fptr rectangle::ptr;
于 2012-10-13T07:54:56.247 に答える
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
于 2012-10-13T07:56:31.810 に答える