Это специализированный вопрос из mingw32 / bin / ld.exe ... неопределенная ссылка на [class] ... collect2.exe: ошибка: ld вернул 1 состояние выхода
Внутри 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 ... неопределенная ссылка на [class] ... collect2.exe: ошибка: ld вернул 1 состояние выхода
И я проверил зависимости цепочки инструментов следующим образом: Makefile : Как правильно включить заголовочный файл и его каталог?
У меня была такая же проблема, как и у вас. Попробуйте переместить определение вашего конструктора и деструктора из cpp в заголовочный файл. Таким образом, связывание хорошо выполняется только при выполнении упомянутой вами простой команды g ++.
Попробуйте:
MyClass(const string& className){ _className=className };
Если определение находится внутри файла cpp, я получаю та же ошибка, что и у вас.
У вас есть MyClass определение конструктора и деструктора (как указано) в вашем заголовочном файле? Вы используете Makefile или только пытаетесь выполнить g ++ через терминал? Линкеру нужен скомпилированный объект MyClass. Если вы компилируете main. cpp во весь исполняемый файл, он должен содержать все объявленные определения.
MyClass