Пользовательские типы данных в вдвойне связанном списке

StackOverflow https://stackoverflow.com//questions/12699108

Вопрос

Я пытаюсь использовать пользовательский тип данных в вдвойне связанном списке.Я могу создать список, но когда я пытаюсь вызвать функцию вставки, это ошибки.Что вызывает эту ошибку?

main.cpp:

#include "command.h" //my custom class 
#include "doublyLinkedList.h"
int main(){

    //create a queue of jobs:
    doublyLinkedList<command>* queue = new doublyLinkedList<command>;

    //creating a new command:
    command *c = new command();
    c->createCommand();
    c->print();
    const command *d = new command(c->name, c->description, c->shellString);

    queue->insert(*d); //problem line
};
.

DoublyLinkedList.h Функция вставки:

template <class Type>
void doublyLinkedList<Type>::insert(const Type& insertItem)
{
nodeType<Type> *current;      //pointer to traverse the list
nodeType<Type> *trailCurrent; //pointer just before current
nodeType<Type> *newNode;      //pointer to create a node
bool found;

newNode = new nodeType<Type>; //create the node
newNode->info = insertItem;  //store the new item in the node
newNode->next = NULL;
newNode->back = NULL;

if(first == NULL) //if the list is empty, newNode is 
                  //the only node
{
   first = newNode;
   last = newNode;
   count++;
}
else
{
    found = false;
    current = first;

    while (current != NULL && !found) //search the list
        if (current->info >= insertItem)
            found = true;
        else
        {
            trailCurrent = current;
            current = current->next;
        }

    if (current == first) //insert newNode before first
    {
        first->back = newNode;
        newNode->next = first;
        first = newNode;
        count++;
    }
    else
    {
          //insert newNode between trailCurrent and current
        if (current != NULL)
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            newNode->next = current;
            current->back = newNode;
        }
        else
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            last = newNode;
        }

        count++;
    }//end else
}//end else
}//end insert
.

Код работает для Ints и Strings, но не для типов «Команда».

Ошибка:

In file included from main.cpp:2:0:
doublyLinkedList.h: In member function âvoid doublyLinkedList<Type>::insert(const Type&) [with Type = command]â:
main.cpp:34:18:   instantiated from here
doublyLinkedList.h:171:13: error: no match for âoperator>=â in âcurrent->nodeType<command>::info >= insertItemâ
doublyLinkedList.h:171:13: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:232:5: note: template<class _T1, class _T2> bool std::operator>=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)
/usr/include/c++/4.6/bits/stl_iterator.h:315:5: note: template<class _Iterator> bool std::operator>=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
/usr/include/c++/4.6/bits/stl_iterator.h:365:5: note: template<class _IteratorL, class _IteratorR> bool std::operator>=(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)
/usr/include/c++/4.6/bits/basic_string.h:2621:5: note: template<class _CharT, class _Traits, class _Alloc> bool std::operator>=(const std::basic_string<_CharT, _Traits, _Alloc>&, const std::basic_string<_CharT, _Traits, _Alloc>&)
/usr/include/c++/4.6/bits/basic_string.h:2633:5: note: template<class _CharT, class _Traits, class _Alloc> bool std::operator>=(const std::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)
/usr/include/c++/4.6/bits/basic_string.h:2645:5: note: template<class _CharT, class _Traits, class _Alloc> bool std::operator>=(const _CharT*, const std::basic_string<_CharT, _Traits, _Alloc>&)
.

Это было полезно?

Решение

Кажется, вы пытаетесь сохранить список Sorted, однако вы не определили операторы сравнения для command.Вам нужно реализовать operator>= для вашего типа, если вы хотите использовать его как есть.

Это подпись, вероятно, может выглядеть что-то подобное:

bool operator>= (const command& a, const command& b);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top