2012-07-09 84 views
1

我想了解boost线程和信号。因此,我实现了这个非常简单的代码,它由一个实现线程的类(Class1)组成。我希望这个班级提供信号接收服务。为此我刚开始利用该信号升压库,但我得到这个错误:当我尝试编译它与海湾合作委员会的Eclipse环境boost线程+信号:mem_fn错误,非法使用非静态成员函数

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

。单例有什么问题吗?或者是绑定到实例方法?

这里是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){} 

而且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 

回答

3

你粘结剂应该有一个参数:

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

好吧我这样做,我得到以下错误: 错误:'a [boost :: _ bi :: storage2 :: a2_ [with A1 = boost :: reference_wrapper ,int I = 1]]' – Sindico 2012-07-09 10:32:39

+0

@Silli那么你的真实代码可能与你所展示的不同(它编译的很好,考虑到我的更正)。 – 2012-07-09 10:45:15

相关问题