2011-03-31 5 views
1

이 간단한 예제가 컴파일되지 않는 이유는 무엇입니까? 어떻게 문제를 해결할 수 있습니까?부스트 신호 컴파일 문제 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

안녕하세요 당신의 컴파일러 오류를 게시하십시오 –

답변

3

포인터에 연결하려고했으나 불가능합니다. 대신 객체에 대한 참조로 연결해야합니다 :

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

신호를 임의의 멤버 함수에 연결할 수 있습니까? 뭔가가 : sig.connect (this-> asdf()); – Allan

+1

@Allan : Boost.Bind가 필요합니다 :'sig.connect (boost :: bind (& HelloWorld :: asdf, this));'. –