c ++ вызывает функцию класса функции другого класса - PullRequest
0 голосов
/ 28 ноября 2010

Я надеюсь, что это имеет смысл для вас, я запутался. дайте мне знать, если есть более простой способ:

double A::a(double(b::*bb)())
{
  b.init();
  return (b->*bb)();
}

void A::run();
{
  cout<< a(b.b1);
  cout<< a(b.b2);
}

class A
{
  B b;
  void run();
  double a(double(b::*bb)());
};

class B
{
  void init();
  double b1();
  double b2();
};

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Это не имеет смысла. Это имеет смысл, хотя:

class B // <- class B definition comes first
{
  void init();
  double b1();
  double b2();
};

class A
{
  B b;
  void run();
  double a(double(B::*bb)()); // <- B instead of b
};

double A::a(double(B::*bb)()) // <- B instead of b
{
  b.init();
  return (b->*bb)();
}

void A::run() // <- you can't put semicolon here
{
  cout<< a(&B::b1); // <- you want to pass the address of a member.
  cout<< a(&B::b2); // <- you want to pass the address of a member.
}

Теперь это имеет больше смысла для меня.

0 голосов
/ 28 ноября 2010

Это:

double a(double(b::*bb)());

Должно быть:

double a(double(B::*bb)());

То есть bb должен быть объявлен как указатель на функцию-член в классе B, а не в объекте b (который является экземпляром, а не самим типом, поэтому не может быть частью типа). * * +1010

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...