0

あるクラスに関数ポインターのベクトルがあり、他のクラスに関数のアドレスを渡したいと思っています。次の実装ではエラーが発生します。正しい方法は何ですか?

class A
{
public:
 void func ()
 {
 }
};

class B
{
public:
 std::vector<void(*)()) myVec;
 void update_func()
 {
  myVec.push_back(&A::func);
 } 
};

int main()
{
 B* b = new B;
 b->update_func();
 return 0;
}
4

3 に答える 3

3

非静的メンバ関数へのポインタにはA::functype がなく、 type があります。そのため、ベクターを変更して必要な要素に一致させるか、ベクターの正しい型の関数へのポインターを使用します。void(*)(void)void(A::*)(void)

于 2013-03-18T17:43:40.733 に答える
1

A の func() は、関数ポインターの宣言と一致するように静的でなければなりません。一方、publicクラス B からアクセスできるように する必要がありますupdate_func()。in B も public である必要があります。それ以外の場合mainはアクセスできないからです。ベクトル宣言にタイプミスがvector<>ありvector<)ます。

///

class A
{
  public:
   static void func ()
   {
   }
};

class B
{
 std::vector<void(*)()> myVec;
 public void update_func()
 {
  myVec.push_back(&A::func);
 } 
};

int main()
{
 B* b = new B;
 b->update_func();
 return 0;
}
于 2013-03-18T17:54:21.647 に答える
0

このコードには多くの問題があります..最初の b->func は、その関数を呼び出したい場合は、その後に () を付ける必要があります..2番目.. void update func()..これも悪いコードです..3番目に、これらの関数を使用できませんそれらはプライベートであるため...ただし、ベクターに正しくプッシュします...

于 2013-03-18T17:40:28.580 に答える