C++ 함수 포인터를 이용해 콜백을 호출하려 합니다.
글쓴이: greathero / 작성시간: 수, 2013/03/27 - 3:57오후
// main.cpp void registerFoo(string name); // 이게 콜백 함수 string fooName(""); int main(..) { A* a; a->process(registerFoo); } void registerFoo(string name) { fooName = name; } // A.cpp void A::process(void (*callback)(string)) { // 여기서는 콜백이 정상적으로 쓰여짐. B* b; b->qooo(callback); // 콜백 함수를 매개변수로 넘김 } // B.cpp void B::qooo(void (*callback)(string)) { ... }
위와 같은 코드가 있습니다.
대략, 함수 포인터를 매개변수로 넘겨서 콜백 호출하려는 코드인데요.
클래스 A에선 잘 전달받아서(즉, A의 process 함수 안에서) 콜백을 정상적으로 호출을 할 수 있습니다.
그런데 클래스 A의 process 함수에서 클래스 B의 qooo라는 함수로 콜백을 넘기려 하는데
여기서 "1개의 확인할 수 없는 외부 참조입니다." 라고 뜨더군요.
한 다리 건너서(main->class A->class B) 호출을 하는 중에 에러가 나는거 같은데 이유를 모르겠습니다ㅠ
왜 에러가 나는걸까요? 에러는 어떻게 고칠 수 있을까요?
Forums:
단순한
그냥 단순한 링크오류같은데요 여러개의 cpp파일이라면 오브젝트 파일 여러개로 컴파일되고 최종적으로 하나의 바이너리로 링크되는데, 링커에 위에 언급하신 A나 B 둘중 하나(혹은 둘다) 오브젝트 파일이 입력에서 제외된게 아닌가 싶군요.
댓글 달기