콜백 기반 직렬 RX 드라이버를 빌드하려고하는데 잘 알려진 구조를 사용하고 있음에도 불구하고 컴파일 오류가 발생합니다. 응용 프로그램. 나는 어리석은 짓을하고 있다고 확신하지만, 내 인생에서 나는 그것을 볼 수 없기 때문에, 여분의 몇 쌍의 눈을 많이 보게 될 것이다. 다음콜백에 대한 파생 클래스 포인터 전달
장치가 작동해야 건설
- 상기 COMMS 특성 동기 통신의
- 전달, 새로운 쓰레드를 생성하지 않으며, 단지 TX 블록에.
- 데이터를 수신하고 새 스레드를 생성하고 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
[가능한 인수없이 생성자를 호출하기 위해 빈 대괄호 세트를 사용하는 것이 왜 오류가 발생합니까?] (http://stackoverflow.com/questions/180172/why-is-it-an-error) -with-no-empty-set-of-no-constructor-with-no) –