2011-03-31 68 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