Как правильно перегрузить оператор присвоения в шаблоне стека?
Есть следующие задание: "Задание 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();
}