Я сделал реализацию стека (с односвязным списком, также реализованным мной), и при попытке перегрузить оператор «<<» для отображения я столкнулся с этой проблемой. </p>
Вот мой стек:
template <class T>
class Stack
{
public:
LinkedList<T> stack;
int Length;
Stack() {
Length = 0;
}
void Push(const T value) {
stack.Add(value);
Length = stack.Length;
}
T Pop() {
T value = stack[0];
stack.Delete(0);
Length = stack.Length;
return value;
}
T operator[](const int index) {
return stack[index];
}
friend std::ostream& operator <<(std::ostream& os, const Stack<T>& s) { //const here causes error
for (int i = 0; i < s.Length; i++)
os << s[i] << " ";
return os;
}
};
Оператор индексирования []
работает нормально Я запустил следующий код в main для проверки стека:
Stack<int> stack;
stack.Push(10);
stack.Push(5);
stack.Push(11);
std::cout << stack[1] << std::endl; // prints 5 as expected
Но при попытке распечатать все содержимое стека с помощью std::cout << stack;
it дает мне ошибку, упомянутую в названии. Удаление ключевого слова const
из-за перегрузки операторов решает эту проблему, но, как я знаю, не рекомендуется передавать объекты, которые не должны быть изменяемыми, без ключевого слова const
.
Как заставить код работать без удаления ключевого слова const
?