1

私はこのメンバーをで定義しています

class X
{
   private:

      int (TMyClass::*pt2Member)(float, char, char);
}

コンストラクターでこのメンバーをNULLに初期化したい。この方法で可能ですか:

 X::X()
 {
      TMyClass::*pt2Member = NULL;
 }

正しい構文とは何ですか?私の関数はC++非静的です。

では、セッターはどのように書くべきですか?

// declaration
void set_pointer_to_function(int(*pt2func)(float f, char c, char c));


// definition
void X::set_pointer_to_function(int(*pt2func)(float f, char c, char c))
{
     pt2Member = pt2func;
} 

それが正しいか?

4

2 に答える 2

5

ポインタが指すものではなく、ポインタ自体に割り当てる必要があります。あなたがしていることをすることによって、あなたはポインタを逆参照しようとしていますが、それはメソッドポインタであるためこの場合は機能しません、そしてそれが指す場所(そしてそれを逆参照することによる副作用)はあなた以来定義されていませんまだ割り当てられていません。

TMyClass::pt2Member = NULL;

したがって、動作します。また、次のようにコンストラクターと一緒に初期化することもできます。

X::X() : pt2Member(NULL)
{
}
于 2012-09-27T16:52:00.013 に答える
1

このような:

class TMyClass;

class X
{
private:
    int (TMyClass::*pt2Member)(float, char, char);
public:
    X() : pt2Member(NULL) { }
};
于 2012-09-27T16:52:26.657 に答える