c++ - 使用 &MyClass::MyFunction 时出现 undefined reference 链接错误

标签 c++ linker g++ function-pointers pointer-to-member

这让我很困惑,所以我想我应该在这里查询:

我有一个类如下:

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

最佳答案

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

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

关于c++ - 使用 &MyClass::MyFunction 时出现 undefined reference 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672529/

相关文章:

c++ - 使用 LLVM IR 实现动态类型语言

c++ - 如何检查 configure.ac 中的特定 gcc 功能

c++ - 如何确保通过 JMS 成功发送短信?

c - 对 `pow' 的 undefined reference - makefile

c++ - G++的奇怪错误

android - arm-linux-androideabi-g++.exe : CreateProcess: No such file or directory error

c++ - 如何在 QtCreator 上添加预构建事件

iphone - XCode 更新 - iOS 链接错误

gcc - 编译错误gcc -lpthread位置

linux - 将 -rdynamic 链接器选项添加到 gcc/g++ 会影响性能吗?