Общий Единый Связанный Список, Неспособный перегруженный = - PullRequest
0 голосов
/ 22 мая 2018

Я впервые создаю общий односвязный список.У меня есть эта ошибка, которая гласит:

No viable overloaded '='

Поэтому я решил перегрузить оператор '=', чтобы заставить его работать, но я все еще получаю ту же ошибку, и я не уверен, почему.Вот мой заголовочный файл:

#ifndef LinkedList_hpp
#define LinkedList_hpp

#include <iostream>

template<class T>
struct Node {
    T data;
    Node<T>* next;
};

template<class T>
class SingleLinkedList {
private:
    Node<T>* head, tail;

    SingleLinkedList & operator=(const SingleLinkedList &rhs) {
        head = rhs.head;
        tail = rhs.tail;
        return *this;
    }
public:
    SingleLinkedList() {
        head = nullptr;
        tail = nullptr;
    }

    void createNode(const T& theData) {
        Node<T>* temp = new Node<T>;
        temp->data = theData;
        temp->next = nullptr;
        if(head == nullptr) {
            head = temp;
            tail = temp;
            temp = nullptr;
        }
        else {
            tail->next = temp;
            tail = temp;
        }
    }

    void display() {
        Node<T>* temp = new Node<T>;
        temp = head;
        while(temp != nullptr) {
            std::cout << temp->data << "\t";
            temp = temp->next;
        }
    }

    void insert_start(const T& theData) {
        Node<T>* temp = new Node<T>;
        temp->data = theData;
        temp->next = head;
        head = temp;
    }

    void insert_position(int pos, const T& theData) {
        Node<T>* previous = new Node<T>;
        Node<T>* current = new Node<T>;
        Node<T>* temp = new Node<T>;
        temp = head;
        for(int i  = 1; i < pos; i++) {
            previous = current;
            current = current->next;

        }
        temp->data = theData;
        previous->next = temp;
        temp->next = current;
    }

    void delete_first() {
        Node<T>* temp = new Node<T>;
        temp = head;
        head = head->next;
        delete temp;
    }

    void delete_last() {
        Node<T>* previous = new Node<T>;
        Node<T>* current = new Node<T>;
        current = head;
        while(current->next != nullptr) {
            previous = current;
            current = current->next;
        }
        tail = previous;
        previous->next = nullptr;
        delete current;
    }

    void delete_position(int pos) {
        Node<T>* previous = new Node<T>;
        Node<T>* current = new Node<T>;
        current = head;
        for(int i = 1; i < pos; i++) {
            previous = current;
            current = current->next;
        }
        previous->next = current->next;
    }

    Node<T>* search(Node<T>* head, const T& target) {

    }
};

Должен ли я создать оператор присваивания в структуре Node?Я не уверен, что еще попробовать.

Вот где я получаю сообщение об ошибке:

enter image description here

...