我试图使用回调
运行boost :: thread一些对象函数 在A类中,有一个像这样的函数:void DoWork(int (*callback)(float))
{
float variable = 0.0f;
boost::this_thread::sleep(boost::posix_time::seconds(1));
int result = f(variable);
}
MAIN中的:
int SomeCallback(float variable)
{
int result;
cout<<"Callback called"<<endl;
//Interpret variable
return result;
}
int main(){
A* file = new A();
boost::thread bt(&A::DoWork, file , &SomeCallback );
cout<<"Asyns func called"<<endl;
bt.join();
cout<<"main done"<<endl;
}
行boost::thread bt(&A::DoWork, file , &SomeCallback );
导致链接器错误。我从本教程中接到的这个电话:
http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html
错误是:
unresolved external symbol "public: void __thiscall A::DoWork(int (__cdecl*)(float))" (?DoWork@A@@QAEXP6AHM@Z@Z) referenced in function _main
这段代码有什么问题?
答案 0 :(得分:2)
未解析的外部符号是链接器错误,这意味着链接器无法找到A::DoWork
的定义。从你的代码我看不到你实际定义函数的位置,但让我猜:
//A.h
class A {
//...
public:
void DoWork(int (*callback)(float)); //declaration
};
//A.cpp
void DoWork(int (*callback)(float))
{
float variable = 0.0f;
boost::this_thread::sleep(boost::posix_time::seconds(1));
int result = f(variable);
}
即。 如果定义与您在.cpp文件中发布的完全相同,那么错误是您没有定义A::DoWork
,而是定义了一个新的免费函数。
然后正确的定义是:
//A.cpp
void A::DoWork(int (*callback)(float)) //define it as a member of A!
{
float variable = 0.0f;
boost::this_thread::sleep(boost::posix_time::seconds(1));
int result = f(variable);
}
如果我猜错了,请提供SSCCE,以便我们评估真正的问题。