我有一個接受函數指針作爲參數並調用函數指針的函數,如下所示。C++回調函數運行時錯誤
int foo (int a, int(*calc)(int))
{
int y;
// ....
// calling calc function via callback
(*calc)(y);
}
Calc功能被稱爲背面看起來像
int calc(int x)
{
// ....
cout << x;
checkValue(x);
}
foo
功能被放置在a.cpp
和功能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;在您的calc函數中使用cout語句之後。您可能沒有看到此輸出,因爲您沒有刷新流。或者使用調試器來驗證您沒有達到checkValue(x)行。 – ChrisCM