2012-07-09 2 views
1

부스트 스레드 및 신호에 익숙해 지려고합니다. 따라서 클래스를 구현하는 매우 간단한 코드 (Class1)를 구현했습니다. 이 수업에서 신호 수신의 결과로 서비스를 제공하고 싶습니다. 이를 위해 난 그냥 신호 부스트 라이브러리를 이용하기 시작했다 그러나 나는이 오류가 무엇입니까 : 나는 GCC와 Eclipse 환경에서 컴파일 할 때부스트 스레드 + 신호 : 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

1 인자가 있어야 귀하의 바인더 : 나는 그렇게했고, 나는 다음과 같은 오류가

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

확인 : 오류 : 'a [boost :: _ bi :: storage2 :: a2_ [A1 = boost :: reference_wrapper , int I = 1]] ' – Sindico

+0

@Sili 그러면 실제 코드가 표시된 코드와 다를 수 있습니다. –