2016-03-08 3 views
1

Я пытаюсь использовать < < оператор А вызвать метод вставки на LinkedList, например:инвалидных операнды с перегруженным оператором <<

a<<b 
takes data b and inserts it into LinkedList a 

Вот моя реализация в моих .h и .cpp файлах :

class LinkedList{ 
public: 
    LinkedList(); 
    LinkedList(const LinkedList &l); //copy constructor 
    ~LinkedList(); //destructor 

    //read the list for items 
    bool reset(); 
    bool next(); 
    int get(); 
    //insert an item in the list 
    bool insert(); 
    bool insert(int &data); 

    //delete an item in the list 
    bool remove(); 

    //Should take data b and add it to the linked list a 
    void operator<< (int data); 
; 
    //advances the internal iterator 1 node if not null 
    void operator++(); 

_________________________________________ 
Linkedlist.cpp 

void LinkedList::operator<<(int &data) 
{ 
    insert(data); 
} 
bool LinkedList::insert(int &data){ 
    LinkedListNode* n; 
    LinkedListNode *tempNode; 
    n = new LinkedListNode(); 
    n -> data = data; 
    if(head==NULL){ 
     head = n; 
     current = head; 
     size++; 
     return true; 
    } 
    if(head->next!=NULL){ 
     tempNode = head->next; 
    } 
    else{ 
     tempNode = head; 
    } 
    while(tempNode->next!=NULL){ 
     tempNode = tempNode->next; 
    } 
    head->next = n; 
    size++; 
    return true; 
    } 

в мой основной, я использую:

l<<num; 

и получаю ошибку:

invalid operands to binary expression ('LinkedList *' and 
    'int') 

Почему это происходит, если я перегрузил оператора в классе LinkedList?

+3

Декларация: 'void operator << (int data);' Реализация: 'void LinkedList :: operator << (int & data)'. Вы можете заметить разницу? –

+3

У вас есть LinkedList *, а не 'LinkedList'. Попробуйте '* l << num;' – molbdnilo

ответ

6

Потому что l является LinkedList *, а не LinkedList. Переопределяя << на LinkedList, вы не получите автоматическое переопределение на LinkedList *.

+0

Спасибо за помощь! – ecatalano

Смежные вопросы