Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблон функции, ошибка "unresolved external symbol" http://www.cyberforum.ru/cpp-beginners/thread799999.html
Ошибки Error 1 error LNK2019: unresolved external symbol "int __cdecl mas(int *,int)" (?mas@@YAHPAHH@Z) referenced in function _main D:\учеба\2sem c++\lab4z3\lab4z3\3.obj Error 2 error LNK2019:...
C++ Функция с переменным числом параметров, как узнать кличество переданных параметров? Добрый вечер, можно не использовать int n, а каким то другим способом узнать количество переданных аргументов в функцию и адрес? int suma (int n, ...) { int *ptr=&n; int s=0; for (int... http://www.cyberforum.ru/cpp-beginners/thread799998.html
программа по непонятным мне причинам работает неверно C++
#include <cstdio> #include <iostream> #include <clocale> using namespace std; int main() { setlocale(LC_ALL, "Russian"); char s;
C++ Шаблоны и статик
Добрый вечер. Вот кусочек кода, почему то переменная dx постоянно обнуляется хотя она static. В чем проблема? template <class T, int n> void init (T (&arr) ) { static int dx; dx++; for (int...
C++ Строка: Удалить лишние пробелы между словами http://www.cyberforum.ru/cpp-beginners/thread799981.html
Задание: нужно удалить лишние пробелы между словами (если один пробел, то его нужно оставить). # include <conio.h> # include <cctype> # include <iostream> using namespace std; void...
C++ Число int перевести в hex и хранить в char Есть число в десятичном формате, допустим int a. Необходимо его в Hex формате положить в char. Рассматриваются только те случаи когда число влезает в char формат. подробнее

Показать сообщение отдельно
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227

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

04.03.2013, 01:37. Просмотров 477. Ответов 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( );
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru