0

这让我很难过,所以我想我会在这里查询:

我有一堂课如下:

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:: 前缀。我只是没有决定检查。几乎和在类定义后忘记分号一样糟糕。

4

1 回答 1

2

您需要为MyClass::myThreadFunc()某个地方编写一个函数体。编写构造函数MyClass不同于实现MyClass::myThreadFunc()成员函数。

如果你在 C/C++ 中调用一个函数,它必须在某个地方有一个函数体。这就是为什么它是一个链接器错误;它试图在所有可用的目标文件中找到函数体,但你没有写一个,所以它不能。

于 2011-07-13T02:36:01.270 回答