2012-03-12 2 views
0

콜백 기반 직렬 RX 드라이버를 빌드하려고하는데 잘 알려진 구조를 사용하고 있음에도 불구하고 컴파일 오류가 발생합니다. 응용 프로그램. 나는 어리석은 짓을하고 있다고 확신하지만, 내 인생에서 나는 그것을 볼 수 없기 때문에, 여분의 몇 쌍의 눈을 많이 보게 될 것이다. 다음콜백에 대한 파생 클래스 포인터 전달

장치가 작동해야 건설

  1. 상기 COMMS 특성 동기 통신의
  2. 전달, 새로운 쓰레드를 생성하지 않으며, 단지 TX 블록에.
  3. 데이터를 수신하고 새 스레드를 생성하고 RX에서 사용자가 전달한 콜백을 실행합니다.

    namespace ocular 
    { 
    Class DeviceCallback 
    { 
    public: 
        DeviceCallback(){} 
        ~DeviceCallback(){} 
        virtual void DeviceCallbackFunction(unsigned char Data){} 
    }; 
    } 
    

    을 그리고 디바이스 클래스 자체 내에서 시작 비동기 RX 방법으로 :

    void DeviceClass::StartAsynchRX(DeviceCallback* callback) 
    { 
        m_externalCallback = callback; // Save a local copy of the callback pointer 
        m_started = true; 
        StartAsynchRXThread();   // Spawn the RX Thread 
        return; 
    } 
    

    그때 유도하고 다음과 같이

이를 구현하기 위해, 나는 기본 콜백 클래스가 내 자신의 콜백 :

Class DemoCallbackClass : public ocular::DeviceCallback 
{ 
public: 
    void DeviceCallbackFunction(unsigned char myData){ 
    std::cout << myData; 
    }; 
} 

음,이게 바로 교과서 맞습니다. 이것은 정상적으로 컴파일 될 것이고 동기식 TX를 위해 장치 클래스를 구성, 구성 및 사용할 수 있습니다. 실제로 주에서 콜백 포인터를 전달 시작하려고하면 컴파일 오류가 나타납니다

void main(void) 
{ 
    DeviceClass MyDevice(); 
    MyDevice.Initialise(*settings from file*); 

    DemoCallbackClass MyDemoCallback(); 

    MyDevice.StartAsynchRX(&MyDemoCallback); // ERROR ON THIS LINE 
} 

1> ...... \ SRC \ 지원 \ AR2500 시운전 \하여 Main.cpp (99) : 오류 C2664 : 'ocular :: DeviceClass :: StartAsynchRX': 'DemoCallbackClass (__cdecl *) (void)'에서 'ocular :: DeviceCallback *'으로 매개 변수 1을 변환 할 수 없습니다.

저는 여기 바보 같은 짓을 한 것이 확실합니다. 그러나 나는 내 삶을 위해 그것을 발견 할 수 없다. 지난 주에 똑같은 접근법을 사용하여 이벤트 타이머 클래스를 작성 했으므로 잘 작동합니다. 구조체/접근법이 모든 사람들에게 정상적으로 보이면, 그것은 미묘한 오타라고 생각합니다. 그리고 그 오류를 없애기 전까지는 한 번에 청크를 다시 작성해야합니다. desparation에서

너의 것,

DKW

+0

[가능한 인수없이 생성자를 호출하기 위해 빈 대괄호 세트를 사용하는 것이 왜 오류가 발생합니까?] (http://stackoverflow.com/questions/180172/why-is-it-an-error) -with-no-empty-set-of-no-constructor-with-no) –

답변

0

이 라인에서 괄호를 제거

DemoCallbackClass MyDemoCallback(); 

그래서 그것은 다음과 같습니다

DemoCallbackClass MyDemoCallback; 

오류 출력은 도움이되지 않습니다 이 모든 경우에,하지만 그것은 그것을 고쳐야한다.

+1

오 ... My ... 하나님 ... :) :) 그런 느낌 빌어 먹을 뮤펫! 그렇게 해줘서 고마워. 나는 내가 생각한 표준 접근 방식에있어서 몇 가지 이상한 확장 성 결함을 발견했는지 걱정했다.(내 접근법을 구현 한 다른 앱이 잠복 버그를 가지고 있다는 의미이므로 안심할 수 있습니다) – OcularProgrammer

관련 문제