将函数连接到boost :: signal运行,但不调用该函数

时间:2010-07-08 18:25:15

标签: c++ boost-signals

我的代码中有一个类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建立联系。有人看到我做错了吗?

1 个答案:

答案 0 :(得分:1)

我猜你是多次定义signal_refresh。声明之前的静态关键字向我建议代码片段在头文件中,你必须将静态放在那里以使其编译而不重新定义符号错误。如果您已经这样做了,那么包含标题的每个源文件都将获得signal_refresh的唯一副本,因此您调用的实例可能不是您连接它的实例。

我可能完全不在这里但是有可能。