함수 포인터를 인수로 받아서 함수 포인터를 아래와 같이 호출합니다. C++ 콜백 함수 런타임 오류
int foo (int a, int(*calc)(int))
{
int y;
// ....
// calling calc function via callback
(*calc)(y);
}
석회질 기능
는a.cpp
에 배치됩니다
int calc(int x)
{
// ....
cout << x;
checkValue(x);
}
기능 foo
과 기능 calc()
및 checkValue()
이 파일 b.cpp
및 c.cpp
에 정의되어 같은 모습을 다시 호출 할 수 있습니다. 내 문제는 calc()
cout
진술 때까지 실행하고 checkValue()
함수를 호출하는 데 실패합니다. 내가받은 오류 보고서는 다음과 같습니다.
symbol lookup error:..... undefined symbol: _ZNSaIcEC1Ev, version GLIBCXX_3.4
이 문제를 어떻게 해결할 수 있습니까?
디버거와 함께 실행하여 충돌이있는 곳을 정확히 알아냅니다. 그것은'checkValue()'를 호출하지만 다른 곳에서는 충돌합니다. 'foo'의 코드를 더 포함하고'checkValue()'의 코드를 포함 시키십시오. 왜냐하면 그 함수 중 하나에서 충돌하기 때문입니다. –
"ldd -r/path/to/your/programm"또는 "readelf -d/path/to/your/programm | grep PATH"를 실행하면 libstdC++의 어떤 버전이 표시됩니까? –
endl; 귀하의 계산 기능에 귀하의 cout 진술 후. 스트림을 플러시하지 않기 때문에이 출력이 표시되지 않을 수 있습니다. 또는 디버거를 사용하여 checkValue (x) 행에 도달하지 않았는지 확인하십시오. – ChrisCM