C++ 함수 포인터를 이용해 콜백을 호출하려 합니다.

greathero의 이미지

// 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) 호출을 하는 중에 에러가 나는거 같은데 이유를 모르겠습니다ㅠ

왜 에러가 나는걸까요? 에러는 어떻게 고칠 수 있을까요?

익명 사용자의 이미지

그냥 단순한 링크오류같은데요 여러개의 cpp파일이라면 오브젝트 파일 여러개로 컴파일되고 최종적으로 하나의 바이너리로 링크되는데, 링커에 위에 언급하신 A나 B 둘중 하나(혹은 둘다) 오브젝트 파일이 입력에서 제외된게 아닌가 싶군요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.