2011-03-31 81 views
1

为什么这个简单的例子不能编译,我该如何解决这个问题?编译boost信号的问题2

#include <iostream> 
#include <boost/signals2/signal.hpp> 

struct HelloWorld { 
    HelloWorld() { 
     i = 0; 
    } 

    void operator()() { 
     std::cout << "I is: " << i++ << std::endl; 
    } 

    void setup() { 
     sig.connect(this); 
    } 

    void run() { 
     sig(); 
    } 

    boost::signals2::signal<void()> sig; 

    private: 
     int i; 
}; 

int main() 
{ 
    HelloWorld hello; 
    hello.setup(); 
    hello.run(); 
    hello.run(); 
    hello.run(); 

    return 0; 
}; 
+2

嗨发布您的编译器错误 – 2011-03-31 13:40:42

回答

3

您正试图连接到指针,这是不可能的。相反,你需要连接到你的对象的引用:

void setup() { 
    sig.connect(boost::ref(*this)); 
} 
+0

它也可以连接到任意成员函数的信号?像这样:sig.connect(this-> asdf()); – Allan 2011-03-31 17:21:35

+1

@Allan:你需要Boost.Bind:'sig.connect(boost :: bind(&HelloWorld :: asdf,this));'。 – 2011-04-01 10:10:27