我的代码中有一个类Yarl
,其中包含一个成员函数refresh
,我希望将其绑定到两个boost::signal
。其中一个信号是类EventHandler
的成员,如下所示:
class EventHandler {
public:
boost::signal<void()> sigRefresh;
};
另一个是另一个文件中的自由浮动信号,声明如下:
namespace utility {
static boost::signal<void()> signal_refresh;
}
在Yarl
的成员函数中,我将refresh
连接到这样的信号:
events::EventHandler eventHandler;
eventHandler.sigRefresh.connect(boost::bind(&Yarl::refresh, this));
utility::signal_refresh.connect(boost::bind(&Yarl::refresh, this));
以后我打电话给这两个信号:
sigRefresh();
signal_refresh();
此代码编译并运行,sigRefresh
完全按预期工作。但是,当我拨打signal_refresh
时没有任何反应。据我所知,refresh
实际上从未与signal_refresh
建立联系。有人看到我做错了吗?
答案 0 :(得分:1)
我猜你是多次定义signal_refresh。声明之前的静态关键字向我建议代码片段在头文件中,你必须将静态放在那里以使其编译而不重新定义符号错误。如果您已经这样做了,那么包含标题的每个源文件都将获得signal_refresh的唯一副本,因此您调用的实例可能不是您连接它的实例。
我可能完全不在这里但是有可能。