typedef void CALLB(int);
class Bcl
{
public:
CALLB *m_func;
Bcl(CALLB *func);
void FuncACall();
};
Bcl::Bcl(CALLB *func):m_func(func)
{}
void Bcl::FuncACall()
{
m_func(0);
}
//************************************************
class Acl
{
public:
Acl();
Bcl varBcl;
void callmeFunc(int n);
void CallIt();
};
Acl::Acl():varBcl(callmeFunc)
{}
void Acl::callmeFunc(int n)
{
cout<<"called "<<n<<endl;
}
void Acl::CallIt()
{
varBcl.FuncACall();
}
int main()
{
Acl var;
var.CallIt();
return 0;
}
Вопрос по теории C++
Есть класс 'Bcl' который имеет указатель на функцию.
Есть класс 'Acl' который создаёт объект 'Bcl' и передаёт ему
указтель на одну из своих функций (всмысле пытается).
Компеляцию это не проходит.
error C3867: 'Acl::callmeFunc': function call missing argument list; use '&Acl::callmeFunc' to create a pointer to member
Что нетак ?
Код:
Объяви метод callmeFunc(int n) статическим:
static void callmeFunc(int n);
Но всёже если я хочу void callmeFunc(int n);
оставить не статическим методом.
Есть для этого решение ?
Но всёже если я хочу void callmeFunc(int n);
оставить не статическим методом.
Есть для этого решение ?[/QUOTE]
Сделай указатель на соотв. метод класса Acl:
typedef void (Acl::PFunc*)(int n);
.....
PFunc m_func;
Только учти, что для вызова нестатического метода класса тебе будет нужен экземпляр этого класса:
Acl acl;
.......
(acl.*m_func)(0);
или так:
Acl* pAcl;
.......
(pAcl->*m_func)(0);