2012-04-18 3 views
3

함수 포인터를 전달하려고하는데 컴파일러 오류가 계속 발생합니다. 나는 일반적으로 함수 포인터를 전달하지 않지만이 경우에는 포인터가 필요합니다. 나는 당신이 내가 잘못하고있는 것을보기 위해 선언문 만 볼 필요가 있다고 생각합니다. (& afunction을 createThread :C++ 함수 포인터를 인수로 전달합니다.

pthread_t * createThread(void *(*func)(void *), string arg) 

및 구현에는 동일합니다 : 헤더 파일에

내가 가진

pthread_t * createThread(void *(*func)(void *), string arg) 

내가 뭘이 함수 호출에 , "도망 쳤다")

다음과 같은 기능 선언이 있습니다 :

void *afunction(void *ptr) //(no header, same for both declaration and implementation). 

하지만 컴파일러는이 밖으로 뱉어 :

Undefined symbols for architecture x86_64: 
    "createThread(void* (*)(void*), std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from: 
     spawnSingleThreadTest()  in threadTests.o 
+0

createThread의 정의는 어디에 있으며 어떻게 생깁니 까? –

+0

은 모두이 파일에 있으며 (빌드 방법은 무엇입니까?) – moooeeeep

+3

이것은 링커 오류입니다. 즉, 링커에서 함수의 정의를 찾을 수 없습니다. 프로젝트에서 네임 스페이스를 사용 했습니까? 문제가 있는지 확인하십시오. 맞춤법 오류가 있습니까? 아니면 선언 및 정의에 다른 네임 스페이스를 사용 했습니까? – Nawaz

답변

1

당신은 당신의 실행 파일에 구현을 연결하지 않았다. 함수 포인터가 아닙니다. 그것은 당신이 당신의 근원을 컴파일 한 방법입니다.

+0

아 아아. 내 이클립스에서 이상한 구성을 가지고 있는데 공통 폴더 안에 두 개의 빌드 구성이 있습니다. scriptSRC/scriptMain.cpp -> 실제로 실제 작업을 수행하는 주 기능이 포함되어 있습니다. –

+0

및 scriptSRC/tst/scriptTest .cpp -> 일련의 단위 테스트가 작동하는지 확인합니다. threadCreator.cpp는 실제 기능의 일부이지만 테스트하고 싶습니다. 그래서 "../path to real src"를 포함하려고했습니다 ... 내가 아는 사람이라면 내 빌드 구성은 다음과 같습니다. script : scriptSRC에 있고 scriptSRC/tst에없는 것을 컴파일하십시오. scriptTest : scriptSRC/tst에있는 내용을 컴파일하십시오. scriptSRC만으로 구성하지 않았습니다. 감사합니다. 미안 내가 그걸 놓친, 그것은 두뇌 유출의 더, 나는 몇 시간 동안 일해 왔어 .... –

+0

프로젝트 -> 속성 -> C/C++ 일반 -> 경로 및 기호 -> 소스 위치 scriptSRC/src에서 작동하는 실제 빌드 src와 scriptSRC/tst에서 테스트를 이동했으며 테스트 구성이 src의 메인을 찾지 못하고 나머지 .cpp 파일을 찾을 수 있도록했습니다. 그것을 시험하기 위해서 필요하다는 것을 알았고, src 메인에 대해서도 똑같이했다. –

관련 문제