Один из моих конструкторов копирования для моего стека ADT, использующий связанный список, кажется, работает в основном за исключением одной ошибки, которую он вызывает.Очевидно, это как-то связано с тем, что «другой» StackLinked является константным типом, а функция pop () меняет его, но может объяснить мне, как я могу это сделать, сохранив «другой», если это возможно, постоянным.Если нет, то как еще я могу это сделать?
Вот конструктор копирования:
template <typename DataType>
StackLinked<DataType>::StackLinked(const StackLinked<DataType> & other)
{
int tempSize = other.getSize();
StackLinked<DataType> temp = StackLinked<DataType>();
for(int i = 0; i < tempSize; i++)
{
temp.push(other.pop()); //error is on this line on the pop function
}
for(int i = 0; i < tempSize; i++)
{
push(temp.pop());
}
}
Вот функции pop () и push ():
template <typename DataType>
DataType StackLinked<DataType>::pop()
{
StackNode * temp = top->next;
delete top;
top = temp;
size--;
}
template <typename DataType>
void StackLinked<DataType>::push(const DataType & newDataItem)
{
StackNode * temp = top;
top = new StackNode(newDataItem, temp);
size++;
}
А основная функция просто создает новый объект StackLinked:
#include "StackLinked.h"
#include "StackLinked.cpp"
#include <iostream>
using namespace std;
int main(void)
{
StackLinked<int> test = StackLinked<int>();
}
Наконец, ошибка:
StackLinked.cpp:21:9: error: passing ‘const StackLinked<int>’ as ‘this’ argument of ‘DataType StackLinked<DataType>::pop() [with DataType = int]’ discards qualifiers [-fpermissive]
temp.push(other.pop());