0

我的代码中有一个类Yarl,其成员函数refresh要绑定到两个boost::signals。这些信号之一是这样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. 有人看到我做错了什么吗?

4

1 回答 1

1

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

我可能在这里完全不合时宜,但这是可能的。

于 2010-07-08T19:44:09.087 回答