Как правильно перегрузить оператор присвоения в шаблоне стека?

Есть следующие задание: "Задание 2. Реализуйте шаблон стека - MyStack2 таким образом, чтобы для хранения элементов использовался ОДНОСВЯЗНЫЙ список. Реализуйте возможность распечатать элементы стека в том порядке, в котором их заносил (push() пользователь. При вводе строк просит перегрузить оператор присвоения хотя я его перегрузил для пользовательского типа. Подскажите, что я делаю не так?

MyString.h

class MyString
{
    char* m_pStr;   //строка-член класса

public:

    MyString(); // конструктор без параметров
    MyString(const char* str);// конструктор с параметром
    MyString(const MyString& nov); // конструктор копирования
    ~MyString(); // деструктор

    const char* GetString()const;
    void SetNewString(const char* str);

    MyString& operator=(MyString& other);

    friend std::ostream& operator<<(std::ostream& os, const MyString& other);
    friend std::ostream& operator>>(std::ostream& os, MyString& other);
};

std::ostream& operator<<(std::ostream& os, const MyString& other);
std::ostream& operator>>(std::ostream& os, MyString& other);

MyString.cpp

MyString& MyString::operator=(MyString& other)
{
    if (this != &other)
    {
        if (this->m_pStr != nullptr)
        {
            delete[] m_pStr;
        }
        this->m_pStr = other.m_pStr;
        other.m_pStr = nullptr;
    }
    return *this;

}

MyStack2.h

#pragma once
#define STACK_H
#pragma once
//#ifndef STACK_H


#include <cassert> // для assert
#include <iostream>
#include<stack>
#include <iomanip> // для setw

template <typename T>
class MyStack2
{
private:
    T* stackPtr;                      // указатель на стек
    const int size;                   // максимальное количество элементов в стеке
    int top;                          // номер текущего элемента стека
public:
    MyStack2(int = 10);                  // по умолчанию размер стека равен 10 элементам
    MyStack2(const MyStack2<T>&);        // конструктор копирования
    ~MyStack2();                         // деструктор

    inline void push(const T&);       // поместить элемент в вершину стека
    inline T pop();                   // удалить элемент из вершины стека и вернуть его
    inline void printStack();         // вывод стека на экран
    inline void printStack1();

    
};

template <typename T>
MyStack2 <T>::MyStack2(int maxSize) : size(maxSize) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под стек
    top = 0; // инициализируем текущий элемент нулем;
}

template <typename T>
MyStack2<T>::MyStack2(const MyStack2<T>& otherStack) :
    size(otherStack.getStackSize()) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под новый стек
    top = otherStack.getTop();

    for (int ix = 0; ix < top; ix++)
        stackPtr[ix] = otherStack.getPtr()[ix];
}

template <typename T>
MyStack2<T>::~MyStack2()
{
    delete[] stackPtr; // удаляем стек
}

//  добавляем элемент в стек
template <typename T>
inline void MyStack2<T>::push(const T& value)
{
    // проверяем размер стека
    assert(top < size); // номер текущего элемента должен быть меньше размера стека

    stackPtr[top++] = value; // помещаем элемент в стек
}

    
// удаляем элемент из стека
template <typename T>
inline T MyStack2<T>::pop()
{
    // проверяем размер стека
    assert(top > 0); // номер текущего элемента должен быть больше 0

    stackPtr[--top]; // удаляем элемент из стека

    return top;
}

// вывод стека на экран
template <typename T>
inline void MyStack2<T>::printStack()
{
    for (int ix = top - 1; ix >= 0; ix--)
        std::cout << " " << stackPtr[ix] ;
}

// вывод стека на экран в обратном прядке
template <typename T>
inline void MyStack2<T>::printStack1()
{
    for (int ix =0 ; ix < top ; ix++)
        std::cout << " " << stackPtr[ix];
}

main

std::cout << " Задание 2 \n";
    {
        MyStack2 <int> iStack(5);

        //int ct = 0;
        //int v;

        //while (ct++ < 5)
        //{
        //  std::cin >> v;
        //  iStack.push(v); // помещаем элементы в стек
        //}
        //std::cout << std::endl;

        iStack.push(5);
        iStack.push(9);
        iStack.push(3);
        iStack.push(7);
        iStack.push(1);

        iStack.printStack();

        std::cout << "\n";

        iStack.pop();

        iStack.printStack();

        std::cout << "\n";

        iStack.printStack1();

        MyStack2 <MyString> strStack(10);

        strStack.push("АБВ");
        strStack.push("ГДЕ");
        strStack.push("ЁЖЗ");
        strStack.push("ккк");
        strStack.push("ааа");
        strStack.push("ууу");
        strStack.push("ыыыы");
        strStack.push("нннн");
        strStack.push("уке");
        strStack.push("ждл");

        strStack.printStack();
    }

Ответы (0 шт):