Я определил в своем классе List<T>
функцию, которая позволяет мне изменить содержимое списка: он возвращает новый список, который является результатом перебора первого списка.Функция застряла при возврате
template <typename T>
List<T> List<T>::reverse(void)
{
List<T> result;
Nodo<T>* aux = head;
while (aux != NULL)
{
result.push_front(aux->getValue());
aux = aux->getNext();
}
return result;
}
В main.cpp я объявлен IntegerList
объект (IntegerList
расширяет List<int>
).
Когда я вызываю функцию, выполняющую list.reverse()
, моя программа застревает, с любым сообщением.
Но в основной функции программа всегда застревает, и после вызова reverse
, использование процессора взлетает от 2% до 30% ...
Это моя копия конструктор List<T>
:
template <typename T>
List<T>::List(const List<T>& copy)
{
head = new Nodo<T>(copy.head);
Nodo<T>* aux = copy.head->getNext();
while (aux != NULL)
{
push_back(aux);
aux = aux->getNext();
}
}
и эти мои копии конструкторы узла:
template <typename T>
Nodo<T>::Nodo(const Nodo<T>& copy)
{
value = copy.value;
next = copy.next;
}
template <typename T>
Nodo<T>::Nodo(Nodo<T>* copy)
{
value = copy->getValue();
next = copy->getNext();
}
это push_back определение & push_front:
template <typename T>
void List<T>::push_front(Nodo<T>* node)
{
push_front(node->getValue());
}
template <typename T>
void List<T>::push_front(const T& item)
{
if (isEmpty()) // se la lista è vuota
head = new Nodo<T>(item);
else
{
Nodo<T> *add = new Nodo<T>(item, head);
head = add;
}
}
template <typename T>
void List<T>::push_front(const Nodo<T> node) // this is probably useless
{
if (isEmpty())
head = new Nodo<T>(node.getValue(), NULL);
else
{
node.setNext(head->getNext());
head = new Nodo<T>(node);
}
}
template <typename T>
void List<T>::push_back(Nodo<T>* node)
{
if (isEmpty())
push_front(node);
else
{
Nodo<T>* aux = head;
while (aux->getNext() != NULL)
aux = aux->getNext();
aux->setNext(node);
}
}
template <typename T>
void List<T>::push_back(const T& item)
{
push_back(new Nodo<T>(item));
}
Я также пытался «сломать все» во время отладки и мой код stucked в данный момент:
template <typename T>
Nodo<T>* Nodo<T>::getNext(void)
{ // my code is stucked at this parenthesis
return next;
}
, но я не знаю, где появляется вызов getNext
функции.
Покажите нам свой конструктор копирования. – 0x499602D2
, вероятно, потому, что 'while (aux! = NULL)' всегда встречается. Но без полного примера мы не можем вам помочь. –
@ Jérôme Leducq Я попытался изменить IntegerList, сформированный 7-8-9-10. – Clyky