这让我很难过,所以我想我会在这里查询:
我有一个课程如下:
class MyClass {
public:
void myThreadFunc();
};
那是在标题中。在构造函数
中MyClass::MyClass() {
...
boost::thread t(boost::bind(&MyClass::myThreadFunc, this));
...
}
正如我所看到的那样。没有编译时错误。但是,当我链接如下:
g++ -o test.exe main.o MyClass.o /*specify boost and other libraries */
我明白了:
MyClass.o:MyClass.cpp:(.text+0xa4): undefined reference to `MyClass::myThreadFunc()'
collect2: ld returned 1 exit status
这没有任何意义。特别奇怪的是,它是一个链接器错误。我包含了两个目标文件。
谁能告诉我发生了什么事?如果它可能是相关的,我在Windows上使用MinGW。
编辑:
史诗失败。在我的cpp文件中定义函数时,我忘记了MyClass ::前缀。我只是没有决定检查。几乎与在课堂定义后遗忘半精胺一样糟糕。
答案 0 :(得分:2)
您需要在某处为MyClass::myThreadFunc()
编写函数体。为MyClass
编写构造函数与实现MyClass::myThreadFunc()
成员函数不同。
如果你用C / C ++调用一个函数,它必须有一个函数体。这就是为什么它是一个链接器错误;它试图在所有可用的目标文件中找到函数体,但是你没有写一个,所以它不能。