首页 > 解决方案 > 如何正确定义 C++ 类析构函数并将其链接到主文件?

问题描述

这是来自mingw32/bin/ld.exe ... undefined reference to [class] ... collect2.exe: error: ld returned 1 exit status

MyClass.hpp里面有一个用户定义的类:

class MyClass
{
    public:
        MyClass(const string& className); 

        ~MyClass() {cout << "Destructor definition instead of g++ default one?";} ; 
        ...

并且您尝试在主文件中从中构造一个对象:

#include "MyClass.hpp" //in the same directory
...
int main()
{
...
MyClass myClassObj = MyClass(myName); //here is the linker problem
...
return 0;
}

错误:

c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: C:\Users\....:Main.cpp:(.text+0x124c): undefined reference to `MyClass::~MyClass()'
collect2.exe: error: ld returned 1 exit status

有两个问题: 1. 如何构建 Makefile 或者我可以使用哪个 g++ 命令将 MyClass 正确链接到 Main?2.g++如何使用这个自己的默认析构函数(这种情况下我根本没有定义,还是不行)。或者,如果我需要自己定义一个,最好的方法是什么?

简单的编译命令:

g++ -o MyProgram.exe Main.cpp -Wall

我还尝试了 Makefile 来自:mingw32/bin/ld.exe ... undefined reference to [class] ... collect2.exe: error: ld returned 1 exit status

我通过以下方式检查了工具链依赖项:Makefile:如何正确包含头文件及其目录?

标签: c++gcclinkerg++destructor

解决方案


我和你有同样的问题。尝试将您的构造函数和析构函数定义从 cpp 移动到头文件中。这样,仅通过运行您提到的简单 g++ 命令即可很好地完成链接。

尝试:

MyClass(const string& className){ _className=className }; 

如果定义在 cpp 文件中,我会收到与您相同的错误。


推荐阅读