2011-03-31 2 views
1

Pourquoi cet exemple simple ne compile-t-il pas et comment contourner le problème?Problèmes de compilation du signal d'amplification2

#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

Salut poster vos erreurs du compilateur –

Répondre

3

Vous essayez de vous connecter à un pointeur, ce qui n'est pas possible. Au lieu de cela, vous devez vous connecter à une référence à votre objet:

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

Est-il également possible de connecter le signal à une fonction de membre arbitraire? Quelque chose comme: sig.connect (this-> asdf()); – Allan

+1

@Allan: Vous avez besoin de Boost.Bind pour cela: 'sig.connect (boost :: bind (& HelloWorld :: asdf, this));'. –