Почему компоновщик не может найти этот деструктор в Ubuntu

#c #ubuntu #g

#c #ubuntu #g

Вопрос:

Есть консольное приложение, я пишу его в рамках самосовершенствования. Иногда я пишу в Windows, иногда в Ubuntu. До некоторого времени проблем не было. Внезапно теперь со следующими настройками в Ubuntu, при запуске: g AlarmSystem.cpp -o main , я получаю ошибку такого типа:

 /usr/bin/ld: /tmp/cchydRcW.o: in function `main': AlarmSystem.cpp:(.text 0x43): undefined reference to `MainConsoleController::MainConsoleController()'
/usr/bin/ld: AlarmSystem.cpp:(.text 0x57): undefined reference to `MainConsoleController::~MainConsoleController()'
collect2: error: ld
returned 1 exit status
 

AlarmSystem.cpp

 #include "MainConsoleController.h"

int main()
{
    MainConsoleController m = MainConsoleController();
    return 0;
}
 

MainConsoleController.h

 #pragma once
#ifndef MAIN_CONSOLE_CONTROLLER_H
#define MAIN_CONSOLE_CONTROLLER_H
#include <iostream>
#include "MainConsoleView.h"
#include "MainConsole.h"

class MainConsoleController
{
private:
    std::string _currentCommand;

    Commands _command;

    MainConsoleView _view;
    MainConsole _model;

    bool _isWorking;
    

public:
    MainConsoleController();
    virtual ~MainConsoleController();
    void CheckInput();
    void MainLoop();
    void ConvertInput();
    void MakeCommand();
};
#endif
 

MainConsoleController.cpp

 #include "MainConsoleController.h"


MainConsoleController::MainConsoleController()
{
    this->_isWorking = true;

    MainLoop();
}

MainConsoleController::~MainConsoleController()
{

}

void MainConsoleController::CheckInput()
{
    std::cin >> this->_currentCommand;
}

void MainConsoleController::MainLoop()
{
    this->_view.PrintWelcome();

    while (this->_isWorking)
    {
        CheckInput();
        ConvertInput();
        MakeCommand();
    }
}
...
 

Кто-нибудь может сказать мне, в чем проблема?

Комментарии:

1. Тактическое замечание: используйте правило нуля . Похоже, что деструктор не MainConsoleController нужен. virtual ~MainConsoleController() = defau< в объявлении должно быть достаточно

2. g AlarmSystem.cpp MainConsoleController.cpp -o main должно сработать, хотя на самом деле это должно быть как минимум g -Wall -Wextra AlarmSystem.cpp MainConsoleController.cpp -o main

3. Обычно я -pedantic также придерживаюсь

4. @user4581301 хороший совет. Ваш намек показал мне, что у меня есть и другие подобные проблемы. Но приведенная выше ошибка исправила ее. Спасибо.

5. @user4581301 -pedantic , к сожалению, мне ни в чем не помог. Я уже пробовал раньше.