Я выполняю задание по связанным спискам с использованием класса шаблона.Ошибка создания конструктора с шаблоном Связанный список Класс
В моем main.cpp я должен иметь возможность создать список (который работает) и создать другой список, используя либо оператор присваивания, либо конструктор копирования. Вот мой код:
template <class T>
LinkedList<T>::LinkedList(const LinkedList<T>& other)
{
Node<T>* tmp = other.getLeader(); //LINE WHERE THE ERROR OCCURS
for(int i = 0; tmp != NULL; i++)
{
insert(i, tmp->element);
tmp = tmp->next;
}
}
template <class T>
Node<T>* LinkedList<T>::getLeader()
{
return head;
}
Ошибка гласит:
linkedList.C:61:6: error: passing ‘const LinkedList<int>’ as ‘this’ argument
of ‘Node<T>* LinkedList<T>::getLeader() [with T = int]’
discards qualifiers [-fpermissive] tmp = other.getLeader();
main.cpp:
int main()
{
LinkedList<int> list;
list.insert(0, 0);
list.insert(1, 1);
list.insert(2, 2);
cout << list;
LinkedList<int> list2(list);
cout << list2;
return 0;
}
элемент и рядом общественные переменные класса Node.
Обратите внимание, что из-за характера этого присвоения я не могу изменить определение класса только для реализации класса.
EDIT:
template <class T>
LinkedList<T>::LinkedList(const LinkedList<T>& other) // I CANNOT CHANGE THIS
{
// I CAN CHANGE THIS
}
Вы используете 'new', чтобы сделать глубокую копию вставить? У вас по умолчанию 'head' на' nullptr'? Изменить: это не связано с вашей ошибкой компилятора, просто мое собственное назидание. – AndyG
Ваша ошибка в том, что 'getLeader()' не const. Исправьте это. – AndyG
Боковое примечание. Я приветствую это в вашем конструкторе копирования, вы не переопределили код в своей функции 'insert' и вместо этого повторно использовали его. Слишком много новичков совершают ошибку, переписывая всю функциональность «insert» в своем конструкторе копирования. – PaulMcKenzie