Форум программистов, компьютерный форум CyberForum.ru

программка по шаблонам - C++

Восстановить пароль Регистрация
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
04.03.2013, 01:37     программка по шаблонам #1
Пытаюсь конвертировать контайнер класс в шаблон.
Укажите, пожалуйста, на ошибки в программе:

Header file "sequence4.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef MAIN_SAVITCH_SEQUENCE3_H
#define MAIN_SAVITCH_SEQUENCE3_H
#include <cstdlib>  // Provides size_t
#include "node2.h"  // Provides node class
 
namespace main_savitch_5
{
    template <class Item>
    class sequence
    {
    public:
        // TYPEDEFS and MEMBER CONSTANTS
        typedef Item value_type;
        typedef std::size_t size_type;
        // CONSTRUCTORS and DESTRUCTOR
        sequence( );
        sequence(const sequence& source);
    ~sequence( );
        // MODIFICATION MEMBER FUNCTIONS
        void start( );
        void advance( );
        void insert(const value_type& entry);
        void attach(const value_type& entry);
        void operator =(const sequence& source);
    void remove_current( );
        // CONSTANT MEMBER FUNCTIONS
        size_type size( ) const { return many_nodes; }
        bool is_item( ) const { return (cursor != NULL); }
        value_type current( ) const;
    private:
    node <Item> *head_ptr;
    node <Item>  *tail_ptr;
    node <Item>  *cursor;
    node <Item>  *precursor;
    size_type many_nodes;
    };
}
 
#include "sequence4.template" // Include the implementation
#endif
Implementation file:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <cassert>  // Provides assert
#include <cstdlib>  // Provides NULL, rand, size_t
#include "node2.h"  // Provides node and the linked list functions
#include "sequence4.h"
using namespace std;
 
namespace main_savitch_5
{   
    template <class Item>
    sequence<Item>::sequence( )
    // Library facilities used: cstdlib
    {
    head_ptr = tail_ptr = cursor = precursor = NULL;
    many_nodes = 0;
    }
 
    template <class Item>
    sequence<Item>::sequence(const sequence& source)
    // Library facilities used: cstdlib, node1.h
    {
    if (source.cursor == NULL)
    {   // There is no current item in the source list:
        list_copy(source.head_ptr, head_ptr, tail_ptr);
        cursor = precursor = NULL;
    }
    else if (source.precursor == NULL)
    {   // The current item in the source is at its head:
        list_copy(source.head_ptr, head_ptr, tail_ptr);
        cursor = head_ptr;
        precursor = NULL;
    }
    else
    {   // The current item in the source is not at its head:
        list_piece(source.head_ptr, source.cursor, head_ptr, precursor);
        list_piece(source.cursor, NULL, cursor, tail_ptr);
        precursor->set_link(cursor);
    }
        many_nodes = source.many_nodes;
    }
    
    template <class Item>
    sequence<Item>::~sequence( )
    // Library facilities used: node1.h
    {
        list_clear(head_ptr);
        many_nodes = 0;
    }
 
    template <class Item>
    void sequence<Item>::start( )
    // Library facilities used: cstdlib
    {
    precursor = NULL;
    cursor = head_ptr;
    }
    
    template <class Item>
    void sequence<Item>::advance( )
    // Library facilities used: node1.h
    {
    assert(is_item());
    precursor = cursor;
    cursor = cursor->link( );
    if (cursor == NULL)
        precursor = NULL;
    }
 
 
    template <class Item>
    void sequence<Item>::insert(const value_type& entry)
    // Library facilities used: cstdlib, node1.h
    {
    if (precursor == NULL)
    {   // The new entry goes at the front:
        list_head_insert(head_ptr, entry);
        cursor = head_ptr;
        if (tail_ptr == NULL)
        tail_ptr = head_ptr; // There were no other nodes.
    }
    else
    {   // The new entry goes between precursor and cursor,
        // and the cursor is set to point at this new entry.
        list_insert(precursor, entry);
        cursor = precursor->link( );
    }
    ++many_nodes;
    }
 
    template <class Item>
    void sequence<Item>::attach(const value_type& entry)
    // Library facilities used: node1.h
    {
    if (tail_ptr == NULL)
        insert(entry); // First node of the list
    else if (cursor == NULL)
    {   // The new entry goes after the current tail:
        list_insert(tail_ptr, entry);
        precursor = tail_ptr;
        cursor = tail_ptr = precursor->link( );
        ++many_nodes;
    }
    else
    {   // The new entry goes after the current cursor:
        list_insert(cursor, entry);
        precursor = cursor;
        cursor = precursor->link( );
        if (tail_ptr == precursor)
        tail_ptr = cursor;
        ++many_nodes;
    }
    }
 
    template <class Item>
    void sequence<Item>::remove_current( )
    // Library facilities used: cassert, cstdlib, node1.h
    {
    assert(is_item( ));    
    if (cursor == head_ptr)
    {   // Remove the front node:
        list_head_remove(head_ptr);
        cursor = head_ptr;
        if (cursor == NULL)
        tail_ptr = NULL; // No more nodes on the list.
    }
    else 
    {   // Remove a node that is not at the head:
        list_remove(precursor);
        cursor = precursor->link( );
        if (cursor == NULL)
        {   // We just removed the old tail node:
        tail_ptr = precursor;
        precursor = NULL;
        }
    }
    --many_nodes;
    }
    
    template <class Item>
    void sequence<Item>::operator =(const sequence& source)
    // Library facilities used: cstdlib, node1.h
    {
    if (this == &source)
            return;
 
    list_clear(head_ptr);
    if (source.cursor == NULL)
    {   // There is no current item in the source list:
        list_copy(source.head_ptr, head_ptr, tail_ptr);
        cursor = precursor = NULL;
    }
    else if (source.precursor == NULL)
    {   // The current item in the source is at its head:
        list_copy(source.head_ptr, head_ptr, tail_ptr);
        cursor = head_ptr;
        precursor = NULL;
    }
    else
    {   // The current item in the source is not at its head:
        list_piece(source.head_ptr, source.cursor, head_ptr, precursor);
        list_piece(source.cursor, NULL, cursor, tail_ptr);
        precursor->set_link(cursor);
    }
        many_nodes = source.many_nodes;
    }
 
    template <class Item>
    typename sequence<Item>::value_type sequence<Item>::current( ) const
    // Library functions used: cassert, node1.h
    {
    assert(is_item( ));
    return cursor->data( );
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2013, 01:37     программка по шаблонам
Посмотрите здесь:

программка с четырехугольником C++
C++ вопрос по шаблонам
Программка на Си++ C++
Глупый вопрос по шаблонам C++
программка на классы C++
C++ c программка со строками
Необходим совет по шаблонам C++
Программка зависает C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
04.03.2013, 09:45     программка по шаблонам #2
QWERY_2012, а где node2.h?
Yandex
Объявления
04.03.2013, 09:45     программка по шаблонам
Ответ Создать тему
Опции темы

Текущее время: 09:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru