【发布时间】:2013-06-20 01:54:10
【问题描述】:
我正在尝试从另一个类中运行一个类的方法,我有一个基本的 GUI,可以让用户填写他的姓名和密码,当它单击登录按钮时,另一个接管并处理事件,我想在成功登录的情况下设置回调,但我在将函数指针发送到我的处理程序时遇到问题。
我做了一个原始示例来说明我正在尝试做的事情。
#include <iostream>
using namespace std;
class LoginHandler {
public:
void loginAttempt(bool result)
{
if(result == true)
{
cout << "Login success! W00t!" << endl;
//Run my callback :)
callback();
} else {
cout << "Login failed." << endl;
}
}
void setCallback(void (*cb)())
{
callback = cb;
}
private:
void (*callback)();
};
class Foo {
public:
void run()
{
LoginHandler* loginHandler = new LoginHandler();
loginHandler->setCallback(&Foo::sayHello);
loginHandler->loginAttempt(false);
loginHandler->loginAttempt(true);
}
void sayHello()
{
cout << "You actually logged in! Isn't that amazing!?" << endl;
}
};
int main()
{
Foo foo;
foo.run();
return 0;
}
我收到下一个错误:
In member function 'void Foo::run()':
error: no matching function for call to 'LoginHandler::setCallback(void (Foo::*)())'
note: candidate is: void LoginHandler::setCallback(void (*)())
note: no known conversion for argument 1 from 'void (Foo::*)()' to 'void (*)()'
感谢您的建议。
【问题讨论】: