Search code examples
eclipseboostboost-bind

boost thread+signals: mem_fn error, invalid use of non-static member function


I am trying to get acquainted with boost thread and signals. I have therefore implemented this very simple code consisting of a class (Class1) implementing a thread. I'd like this class to provide services as result of signals reception. To this end I have just started to exploit the signal boost library but I am getting this error:

 /home/andrea/libs/boost_1_50_0/boost/bind/mem_fn.hpp:359:22: error: invalid use of non-static member function

when I try to compile it in the Eclipse environment with gcc. Is there anything wrong with the singleton or is the binding to the instance method?

Here is Class1.cpp

#include "Class1.hpp"
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
#include "Package1.hpp"

Class1::Class1(){
 boost::thread thread(boost::bind(&Class1::classifierBehavior,this));
};

void Class1::classifierBehavior(){
  service.run();
  Package1Signals::getInstance()->signal1.connect(boost::bind(&Class1::method1,      boost::ref(*this)));
};

void Class1::method1(Signal1 signal1){}

And Package1.hpp

#ifndef PACKAGE1_HEADER
#define PACKAGE1_HEADER
#include <boost/signal.hpp>

struct Signal1{
  int foo;
};

 class Package1Signals{
 private:
    Package1Signals();
            static Package1Signals * instance;
public:
    boost::signal<void (Signal1)> signal1;
    static Package1Signals * getInstance(){
        if(!instance){
            instance = new Package1Signals();
        }
        return instance;
    };
 };
 #endif

Solution

  • Your binder should have 1 argument:

    boost::bind(&Class1::methpod1, boost::ref(*this), _1)