cpp에서 "does not match void*(*)(void*)"에러 메시
글쓴이: cho's / 작성시간: 월, 2004/05/03 - 12:08오후
cpp에서 pthread를 호출합니다.
다른 pthread함수는 이상이 없는데 pthread_create함수만 다음의 메시지를 나타내며 에러가 나는군요. 당연히 멤버 함수 호출하는 함수니까 컨버젼등의 문제가 있겠지만 서도 (void*(*)(void*))나 다른 컨버젼을 해도 문제가 해결되지 않네요? 저와 같은 문제를 겪으셨던 분들 계신가요?
샘플입니다. 간단하게 제 코드의 모습을 보이자면 다음과 같습니다.
classs SampleClass{ public: pthread_t thread; SampleClass(); ~SampleClass(); void *loop(void *param); }; void *SampleClass:loop(void *param) { while(1){ } return NULL; } SampleClass:SampleClass() { pthread_create(&thread, NULL, loop, this) }
Forums:
Re: cpp에서 "does not match void*(*)(void*)"에러
pthread_create 함수는 C함수이지요???
그리고 loop 함수는 SampleClass의 멤버함수이지요?
그러니 동작하지 않는 것이 당연합니다.
pthread_create 함수는 내부적으로 단순히 loop를 호출하려 하겠지만
SampleClass 객체없이 loop함수를 호출하는 것은 불가능합니다.
loop함수를 static 함수로 바꾸고
pthread_create(&thread, NULL, SampleClass::loop, this)
이렇게 바꿔보거나 아니면 loop를 SampleClass의 포인터를 받는 일반함수로
바꾸어보세요.
여담입니다만 제목만 보고 전처리기에서 이런 메시지도 나오나 했습니다 :)
여담입니다만 제목만 보고 전처리기에서 이런 메시지도 나오나 했습니다 :)
멤버함수는 해당 class의 instance를 통해서만 refrence를 생성할 수 있으므로 loop라는 이름으로 호출된다고 해도 그건 void*(SampleClass:: )(void*)이지 void *(*)(void*)이 아니니까 type conversion으로 해결될 문제가 아니라고 봅니다.
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
댓글 달기