2013-05-25 3 views
0

я в настоящее время обучения, как связанные списки работы в C++, и я написал этот код, который дает мне ошибку компиляции, и я не получаю resalts, что я получил в более ранней версии коды. Это ранняя версия моего предыдущего кода, который я потерял.Связанных список и узлы

Так что мне нужна помощь с:

Как следует функция добавить (что помещает элемент последний в списке) выглядит?

Что мне нужно сделать, чтобы добавить к deconstructors?

И remove_if (T & t), который должен удалить все элементы со значением t, remove_if (предикат & pred), который должен удалить все элементы pred, возвращает true?

Что мне нужно сделать, чтобы добавить между T>?

Мой код, который я отредактировал:

#include <iostream> 
    using namespace std; 

    template <class T> 
    class List; 

    template <class T> 
    class Node { 
    public: 
     Node (T *t) : data(t), next(0) {} 
     ~Node(); 
    private: 
     T *data; 
     Node* next; 
     friend class List<T>; 
    }; 

    template <class T> 

    class Predicate { 
    public: 
     Predicate() {} 
     virtual bool operator()(const T& v) = 0; 
    }; 

    template <class T> 
    class List { 
    public: 
     List() : first(new Node<T>(T())) {} //"dummy"-node 

     void add(T *t); 
     void remove_if(T t); 
     void remove_if(Predicate<T> &pred); 
     void print(); 

    private: 
     Node<T> *first; 
    }; 

Главная:

int main() 
    { 

     List<int> intlista; 
     intlista.add(new int(1)); 
     intlista.add(new int(2)); 
     intlista.add(new int(3)); 
     intlista.add(new int(2)); 
     intlista.add(new int(4)); 
     intlista.add(new int(5)); 
     intlista.add(new int(6)); 

     intlista.print(); 

     intlista.remove_if(2); 
     intlista.print(); 

     Between<int> one_to_four(1,4); 
     intlista.remove_if(one_to_four); 
     intlista.print(); 
    } 

писал:

{ 1 2 3 2 4 5 6 } 
    { 1 3 4 5 6 } 
    { 5 6 } 
+2

Какие ошибки вы получаете – juanchopanza

+0

вы должны показать 'Список определений :: add' в??. –

+0

@juanchopanza «Между не было объявлено в этой области» «ожидаемое первичное выражение перед« int »« «ожидается; до» i нт «» «one_to_four не был объявлен в этой области» –

ответ

0

Это на самом деле не ответить на ваш вопрос, но:

template <class T> 
class Node { 
public: 
    Node (T *t) : data(t), next(0) {} 
    ~Node(); 
private: 
    T *data; 
    Node* next; 
    friend class List<T>; 
}; 

Кажется неправильным хранить указатель на T в связанном списке. Весь смысл шаблонных связанных списков состоит в том, что сохраненные данные могут храниться непосредственно в списке, как есть (и если по какой-либо хорошей или плохой причине вы хотите сохранить int * в списке, то вы делаете List<int *> list;.

Теперь для вашего актуальный вопрос: ли Between один из ваших классов Если да, то вы включили заголовок это

+0

Привет. Между должны быть пред таким образом, программа может быть составлена ​​и иметь возможность запускать –

+0

Ошибка «Между не была объявлена» говорит о том, что класс не был объявлен ... –

+0

Да - Но мне нужно пойти на одну проблему в время, могу ли я получить помощь от того, как я должен написать метод add() и что я должен добавить к деконструкторам? –

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