你可以解释一下为什么除了main()中的最后一个std :: cout行之外,这段代码什么都没有显示?通过stackoverflow.com上的类似线程检查,无法将它们连接到我的,这是否合法?我尝试将类的函数指针设置为另一个类函数:
#include <iostream>
class container;
class one {
public:
one()
{
eventsHandler = NULL;
};
~one() {};
void (container::*eventsHandler)();
};
class container {
public:
container()
{
zone = new one;
zone->eventsHandler = &container::events;
};
~container()
{
delete zone;
};
one *zone;
void events()
{
std::cout << "event handler is on..." << std::endl;
};
};
int main()
{
container *test = new container;
test->zone->eventsHandler;
std::cout << "just checker..." << std::endl;
delete test;
system("pause");
};
答案 0 :(得分:3)
您应该使用operator->*
来调用成员函数指针,并将test
指定为将被调用的对象,
(test->*test->zone->eventsHandler)();
或更清楚,
(test->*(test->zone->eventsHandler))();
答案 1 :(得分:1)
你必须在第38行实际调用函数指针,如下:
(test->*test->zone->eventsHandler)();
答案 2 :(得分:1)
您需要提供一个对象来调用指向memeber函数的指针:
container *test = new container;
(test->*test->zone->eventsHandler)();
此处,test
是对象,test->zone->eventsHandler
是指向已保存的成员函数的指针,operator->*
将它们连接起来。
所以,它与任何其他成员函数非常相似;但是,您可以切换哪些对象来调用成员:
container *first = new container;
container *second = new container;
(first->*second->zone->eventsHandler)();
// both pointers point to the same function
std::cout << (first->zone->eventsHandler == second->zone->eventsHandler) << std::endl;