如何正确定义和 link 主文件的 C++ class 析构函数?
How to correctly define and link a C++ class destructor to a main file?
这是来自
的一个特殊问题
MyClass.hpp里面有一个用户自定义的class:
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 来自:
我通过以下方式检查了工具链依赖关系:Makefile: How to correctly include header file and its directory?
您的头文件中是否有 MyClass
构造函数和析构函数定义(如指定的那样)?您是使用 Makefile 还是仅尝试通过终端执行 g++?
链接器需要 MyClass
的编译对象。如果将 main.cpp 编译为整个可执行文件,它应该包含所有声明的定义。
我遇到了和你一样的问题。尝试将构造函数和析构函数定义从 cpp 移动到头文件中。这样,仅通过 运行 您提到的简单 g++ 命令就可以很好地完成链接。
尝试:
MyClass(const string& className){ _className=className };
如果定义在 cpp 文件中,我会得到与您相同的错误。
这是来自
MyClass.hpp里面有一个用户自定义的class:
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 来自:
我通过以下方式检查了工具链依赖关系:Makefile: How to correctly include header file and its directory?
您的头文件中是否有 MyClass
构造函数和析构函数定义(如指定的那样)?您是使用 Makefile 还是仅尝试通过终端执行 g++?
链接器需要 MyClass
的编译对象。如果将 main.cpp 编译为整个可执行文件,它应该包含所有声明的定义。
我遇到了和你一样的问题。尝试将构造函数和析构函数定义从 cpp 移动到头文件中。这样,仅通过 运行 您提到的简单 g++ 命令就可以很好地完成链接。
尝试:
MyClass(const string& className){ _className=className };
如果定义在 cpp 文件中,我会得到与您相同的错误。