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
好吧我这样做,我得到以下错误: 错误:'a [boost :: _ bi :: storage2 :: a2_ [with A1 = boost :: reference_wrapper ,int I = 1]]' –
Sindico
2012-07-09 10:32:39
@Silli那么你的真实代码可能与你所展示的不同(它编译的很好,考虑到我的更正)。 – 2012-07-09 10:45:15