使用& MyClass :: MyFunction时未定义的引用链接错误

时间:2011-07-12 23:42:29

标签: c++ linker g++ function-pointers member-function-pointers

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

我有一个课程如下:

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 ::前缀。我只是没有决定检查。几乎与在课堂定义后遗忘半精胺一样糟糕。

1 个答案:

答案 0 :(得分:2)

您需要在某处为MyClass::myThreadFunc()编写函数体。为MyClass编写构造函数与实现MyClass::myThreadFunc()成员函数不同。

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