When I try to compilate my C++ program using gcc I get errors:
main.cpp:12:7: error: redefinition of 'class Logger'
 class Logger {
       ^~~~~~
In file included from main.cpp:6:0:
Logger.h:9:7: error: previous definition of 'class Logger'
 class Logger {
       ^~~~~~
main.cpp:56:7: error: redefinition of 'class PaymentStrategy'
 class PaymentStrategy {
       ^~~~~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:5:7: error: previous definition of 'class PaymentStrategy'
 class PaymentStrategy {
       ^~~~~~~~~~~~~~~
main.cpp:62:7: error: redefinition of 'class CreditCardPayment'
 class CreditCardPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:12:7: error: previous definition of 'class CreditCardPayment'
 class CreditCardPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~~~~
main.cpp:71:7: error: redefinition of 'class SberPayPayment'
 class SberPayPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:18:7: error: previous definition of 'class SberPayPayment'
 class SberPayPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~
main.cpp:80:7: error: redefinition of 'class BankTransferPayment'
 class BankTransferPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:24:7: error: previous definition of 'class BankTransferPayment'
 class BankTransferPayment : public PaymentStrategy {
       ^~~~~~~~~~~~~~~~~~~
main.cpp:90:7: error: redefinition of 'class ShoppingCart'
 class ShoppingCart {
       ^~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:30:7: error: previous definition of 'class ShoppingCart'
 class ShoppingCart {
       ^~~~~~~~~~~~
main.cpp:138:7: error: redefinition of 'class Engine'
 class Engine {
       ^~~~~~
In file included from main.cpp:7:0:
Carpay.h:40:7: error: previous definition of 'class Engine'
 class Engine {
       ^~~~~~
main.cpp:150:7: error: redefinition of 'class FuelSystem'
 class FuelSystem {
       ^~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:47:7: error: previous definition of 'class FuelSystem'
 class FuelSystem {
       ^~~~~~~~~~
main.cpp:162:7: error: redefinition of 'class ElectricalSystem'
 class ElectricalSystem {
       ^~~~~~~~~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:54:7: error: previous definition of 'class ElectricalSystem'
 class ElectricalSystem {
       ^~~~~~~~~~~~~~~~
main.cpp:174:7: error: redefinition of 'class CarFacade'
 class CarFacade {
       ^~~~~~~~~
In file included from main.cpp:7:0:
Carpay.h:61:7: error: previous definition of 'class CarFacade'
 class CarFacade {
       ^~~~~~~~~

Here is main.cpp, Logger.h and Carpay.h contents:
Logger.h:
#include <fstream>
#include <string>
#include <stdexcept>

#ifndef LOGGER_H
#define LOGGER_H

// Класс Logger - паттерн Singleton для логирования
class Logger {
private:
    std::ofstream logFile;
    static Logger* instance;
    Logger(); // Приватный конструктор для Singleton

public:
    static Logger* getInstance();
    void log(const std::string& message);
    ~Logger(); // Деструктор для закрытия файла

    // Запрет копирования и операции присваивания
    Logger(const Logger&) = delete;
    Logger& operator=(const Logger&) = delete;
};

#endif // LOGGER_H

Carpay.h:
#ifndef CARPAY
#define CARPAY

// Интерфейс стратегии для оплаты
class PaymentStrategy {
public:
    virtual ~PaymentStrategy() = default;
    virtual void pay(int amount) = 0;
};

// Стратегия оплаты с использованием кредитной карты
class CreditCardPayment : public PaymentStrategy {
public:
    void pay(int amount);
};

// Стратегия оплаты с использованием системы СберПэй
class SberPayPayment : public PaymentStrategy {
public:
    void pay(int amount);
};

// Стратегия оплаты с использованием банковского перевода
class BankTransferPayment : public PaymentStrategy {
public:
    void pay(int amount);
};

// Корзина покупок, использующая стратегию оплаты
class ShoppingCart {
private:
    PaymentStrategy* paymentStrategy;

public:
    ShoppingCart(PaymentStrategy* strategy);
    void checkout(int amount);
};

// Подсистема для работы с двигателем
class Engine {
public:
    void start();
    void stop();
};

// Подсистема для работы с топливной системой
class FuelSystem {
public:
    void pumpFuel();
    void stopPumpingFuel();
};

// Подсистема для работы с электрической системой
class ElectricalSystem {
public:
    void powerOn();
    void powerOff();
};

// Фасад для работы с автомобилем, обеспечивает упрощенный интерфейс
class CarFacade {
private:
    Engine engine;
    FuelSystem fuelSystem;
    ElectricalSystem electricalSystem;

public:
    void startCar();
    void stopCar();
};

#endif

Main.cpp:
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <limits>
#include <string>
#include "Logger.h"
#include "Carpay.h"

using namespace std;

// Паттерн Singleton для логгера
class Logger {
private:
    ofstream logFile;
    static Logger* instance;

    // Приватный конструктор для Singleton
    Logger() {
        logFile.open("log.txt", ios::out | ios::app);
        if (!logFile.is_open()) {
            throw runtime_error("Не удалось открыть файл лога.");
        }
    }

public:
    // Получение экземпляра логгера
    static Logger* getInstance() {
        if (!instance) {
            instance = new Logger;
        }
        return instance;
    }

    // Запись сообщения в лог и вывод в консоль
    void log(const string& message) {
        logFile << message << endl;
        cout << message << endl;
    }

    // Деструктор для закрытия файла
    ~Logger() {
        if (logFile.is_open()) {
            logFile.close();
        }
    }

    // Удаляем возможность копирования и присваивания
    Logger(const Logger&) = delete;
    Logger& operator=(const Logger&) = delete;
};

// Инициализация статической переменной instance
Logger* Logger::instance = nullptr;

// Интерфейс стратегии
class PaymentStrategy {
public:
    virtual void pay(int amount) = 0;
};

// Конкретные стратегии
class CreditCardPayment : public PaymentStrategy {
public:
    void pay(int amount) override {
        string message = "Оплачено " + to_string(amount) + " с использованием кредитной карты.";
        Logger::getInstance()->log(message);
        cout << message << endl;
    }
};

class SberPayPayment : public PaymentStrategy {
public:
    void pay(int amount) override {
        string message = "Оплачено " + to_string(amount) + " с использованием СберПэй.";
        Logger::getInstance()->log(message);
        cout << message << endl;
    }
};

class BankTransferPayment : public PaymentStrategy {
public:
    void pay(int amount) override {
        string message = "Оплачено " + to_string(amount) + " с использованием банковского перевода.";
        Logger::getInstance()->log(message);
        cout << message << endl;
    }
};

// Контекст, использующий стратегию
class ShoppingCart {
private:
    PaymentStrategy* paymentStrategy;

public:
    ShoppingCart(PaymentStrategy* strategy) : paymentStrategy(strategy) {}

    void checkout(int amount) {
        paymentStrategy->pay(amount);
    }
};

// Функция для выбора задачи (1 - оплата, 2 - автомобиль)
int chooseTask() {
    int task;
    cout << "Выберите задачу:" << endl;
    cout << "1. Оплата" << endl;
    cout << "2. Работа с автомобилем" << endl;
    cout << "3. Выход" << endl;
    cout << "Ваш выбор: ";
    cin >> task;
    return task;
}

// Функция для выбора способа оплаты
PaymentStrategy* choosePaymentMethod() {
    int choice;
    cout << "Выберите способ оплаты:" << endl;
    cout << "1. Кредитная карта" << endl;
    cout << "2. СберПэй" << endl;
    cout << "3. Банковский перевод" << endl;
    cout << "Ваш выбор: ";
    cin >> choice;

    switch (choice) {
        case 1:
            return new CreditCardPayment();
        case 2:
            return new SberPayPayment();
        case 3:
            return new BankTransferPayment();
        default:
            cout << "Неправильный выбор. Используется кредитная карта по умолчанию." << endl;
            return new CreditCardPayment();
    }
}

// Подсистема для работы с двигателем
class Engine {
public:
    void start() {
        cout << "Двигатель запущен" << endl;
    }

    void stop() {
        cout << "Двигатель заглушен" << endl;
    }
};

// Подсистема для работы с топливной системой
class FuelSystem {
public:
    void pumpFuel() {
        cout << "Топливо подано в двигатель" << endl;
    }

    void stopPumpingFuel() {
        cout << "Топливо не подаётся" << endl;
    }
};

// Подсистема для работы с электрической системой
class ElectricalSystem {
public:
    void powerOn() {
        cout << "Питание включено" << endl;
    }

    void powerOff() {
        cout << "Питание выключено" << endl;
    }
};

// Фасад, предоставляющий унифицированный интерфейс для работы с подсистемами
class CarFacade {
private:
    Engine engine;
    FuelSystem fuelSystem;
    ElectricalSystem electricalSystem;

public:
    void startCar() {
        cout << "Запуск автомобиля" << endl;
        electricalSystem.powerOn();
        fuelSystem.pumpFuel();
        engine.start();
    }

    void stopCar() {
        cout << "Автомобиль заглушен" << endl;
        engine.stop();
        fuelSystem.stopPumpingFuel();
        electricalSystem.powerOff();
    }
};

int main() {
    int task;
    while (true) {
        task = chooseTask();

        switch (task) {
            case 1: {
                int amount;
                cout << "Введите сумму для оплаты: ";
                cin >> amount;

                PaymentStrategy* chosenPaymentMethod = choosePaymentMethod();
                ShoppingCart shoppingCart(chosenPaymentMethod);
                shoppingCart.checkout(amount);
                delete chosenPaymentMethod;
                break;
            }
            case 2: {
                CarFacade carFacade;

                int choice;
                do {
                    cout << "Выберите действие:" << endl;
                    cout << "1 - Запустить автомобиль" << endl;
                    cout << "2 - Заглушить автомобиль" << endl;
                    cout << "3 - Выход" << endl;
                    cin >> choice;

                    switch (choice) {
                        case 1:
                            carFacade.startCar();
                            break;
                        case 2:
                            carFacade.stopCar();
                            break;
                        case 3:
                            cout << "Выход из программы." << endl;
                            break;
                        default:
                            cout << "Неверный выбор. Попробуйте снова." << endl;
                    }
                } while (choice != 3);
                break;
            }
            case 3:
                cout << "Выход из программы." << endl;
                return 0;
            default:
                cout << "Неверный выбор задачи. Попробуйте снова." << endl;
        }
    }

    return 0;
}

Please find and fix error