2016-04-09 11 views
-2

Dies ist meine Header-DateiWie verkette ich zwei einfach verkettete Listen über Operatorüberladung?

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 

#include <iostream> 
#include <string> 
using namespace std; 

class Node 
{ 
    friend class LinkedList; 

public: 
    Node(string& name, int num) :studentName(name), RUID(num) 
    { 
     this->next = NULL; 
    } 

private: 
    string studentName; 
    int RUID; 
    Node *next; 
}; 

class LinkedList 
{ 
public: 
    LinkedList(); 
    ~LinkedList(); 

    LinkedList& operator+(LinkedList &i); 
    //LinkedList operator=(); 

    void makeLists(int n); 
    void addNode(LinkedList &i); 
    void removeNode(); 
    void printList(); 
    void printElement(); 
    void sortList(); 

private: 
    Node *head; 
    Node *tail; 
    int size; 
}; 

#endif 

... und dies ist mein Operator + Funktion

LinkedList& LinkedList::operator+(LinkedList &i) 
{ 
    LinkedList tohma; 
    tohma = *this; 
    tohma += i; 
    return tohma; 
} 

Ich bin mit dem Operator + = eine Fehlermeldung bekommen, aber ich bin so ratlos wie Ich sollte es anders machen. Ich habe das Gefühl, dass ich in der Nähe bin, aber vielleicht mache ich einen logischen Fehler?

Jedwedes Hilfe würde

+0

Es ist 'Operator +', nicht '+ =' (das isn‘ t sogar definiert), und es gibt eine lokale Referenz zurück - falsch. Rückgabe nach Wert. – LogicStuff

+0

Entschuldigung, ich meine, es gibt eine Fehlermeldung bei "tohma + = i". Mein schlechtes – CodingPoding

Antwort

0

Typischerweise erkennt, operator+ für eine LinkedList ist wie folgt strukturiert:

LinkedList operator+(const LinkedList& _list) { 

    // ptr to list to return, initialised with this 
    LinkedList* ret_list = this; 

    // temporary node ptr for iterating through _list 
    Node* temp = _list.head; 

    // loop through contents of _list 
    while (temp != nullptr) { 
     // insert data from _list to ret_list 
     ret_list->insert(temp->data); 
     // ^= this will need to be changed for your specific list fields and insert methods 
     temp = temp->next; 
    } 

    return &ret_list; 

} 

Was die operator+=, die ähnliche Logik hat:

LinkedList& operator+=(const LinkedList& _list) { 

    Node* temp = _list.head; 

    while (temp != nullptr) { 
     insert(temp->data); 
     temp = temp->next; 
    }   

    return *this; 

} 

Ich habe vielleicht etwas falsch gemacht, da es ziemlich spät ist, aber es sollte genau sein.

+0

Das hilft definitiv. Ich muss nur noch daran arbeiten, meine zwei Daten einzufügen. – CodingPoding

+0

Danke, ich habe meine Mine etwas anders gemacht als du, aber deine war sehr hilfreich – CodingPoding

0
LinkedList LinkedList::operator+(const LinkedList &i) 
{ 
    LinkedList* tohma = this; 
    Node* temp = i.head; 

    tohma->tail->next = temp; 

    return *tohma; 
} 

Da ich schon der Tailing-Knoten für meine erste Liste gespeichert hatte, konnte ich bedienen, dass es mit der zweiten Liste verketten