2016-04-09 11 views
-2

Buİki bağlı olarak bağlanmış listeleri operatör aşırı yüklemesiyle nasıl birleştirilir?

#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 

benim başlık dosyasıdır ... ve bu benim operatör + fonksiyonu

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

I + = operatörü ile bir hata mesajı alıyorum ama nasıl olarak stumped Bunu farklı yapmalıyım. Yakın olduğumu hissettim ama belki mantıklı bir hata yapıyorum? aşağıdaki gibi

herhangi bir ve tüm yardım

Tipik
+0

' operatörü bunu + bitiştirmek için kullanabilirsiniz başardı t bile tanımlanmış) ve bir yerel referans ile döndürür - yanlış. Değere dönüş. – LogicStuff

+0

Üzgünüz, "tohma + = i" adresinde bir hata mesajı var. Benim kötü – CodingPoding

cevap

0

takdir, bir LinkedList için operator+ yapılandırılmıştır:

benzer bir mantık sahip operator+= gelince
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; 

} 

:

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

    Node* temp = _list.head; 

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

    return *this; 

} 

Oldukça geç olduğu için yanlış bir şeyim olabilir, ama doğru olmalı. Zaten atık düğüm benim ilk liste için kaydedilmiş olduğu için

+0

Bu kesinlikle yardımcı olur. Sadece iki veriyi eklemek için çalışmam gerekiyor. – CodingPoding

+0

Teşekkür ederim, sizden biraz farklı bir şekilde benim yaptığımı yaptım ama seninki çok yardımcı oldu. – CodingPoding

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

    tohma->tail->next = temp; 

    return *tohma; 
} 

, ben değil, `+ =` (yani değil mi' `ikinci liste ile

O var