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

Не могу определить ошибку (конкретизация шаблонной функции) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ строка http://www.cyberforum.ru/cpp-beginners/thread453122.html
Всем привет! Есть вопрос: Создать класс Time для работы со временем в формате «час:минута:секунда». Класс должен включать в себя функциию инициализации строкой (например, «23:59:59»). Помогите пожалуйста реализовать, а то неправильно получается((
C++ Алгоритмы замещения страниц(STL, вторая попытка) Помогите пожалуйста найти ошибку в алгоритме, вроде все правильно работает, но иногда при разных входных данных возникает ошибка. Так вот, решил реализовать алгоритм замещения страниц "Вторая попытка". Коротко о задаче, имеется память ограниченного размера, в память на вход подаются страницы, алгоритм подобен FIFO, отличие в том, что если страница есть в памяти, то она переводится в конец... http://www.cyberforum.ru/cpp-beginners/thread453116.html
Почему for_each() не выводит кирилицу C++
Вот такой код: #include <iostream> #include <string> #include <vector> #include <algorithm> void show(const std::string & s); int main() { using namespace std; setlocale(0, "");
C++ Перевод из одной системы счисления в другую.
Мне задали сделать калькулятор для программиста на языке С. В нем требуется выполнение операций только целые числа, 4 арифметических действия, битовые операции | & ~ ^, перевод в 8,10,16,2 систему исчисления. Вопрос: Есть ли функции в С которые осуществляют перевод в 8,10,16,2 систему исчисления? Какие это функции, как их использовать. P.S. Если вы уже делали такой калькулятор, выложите...
C++ Числа - близнецы http://www.cyberforum.ru/cpp-beginners/thread453065.html
В массиве простых чисел определить наличие чисел-близнецов (11-13; 7-5; 3-5)
C++ функция вывода системного времени Всем привет! Необходимо написать функцию вывода текущего системного времени Вот слепил, а не работает: void InitTime(Time& time) { time_t rawtime; struct tm *timeinfo; time(&rawtime); подробнее

Показать сообщение отдельно
eaglecrazy
1 / 1 / 0
Регистрация: 06.02.2012
Сообщений: 31
27.02.2012, 09:39     Не могу определить ошибку (конкретизация шаблонной функции)
Всем привет. Есть шаблонная функция
C++
1
2
template<typename T>
void Tree<T>::inTreeHelper(const T &data, Leaf<T> *currentLeafPtr)
её нужно конкретизировать для типа char*
определяю её как
C++
1
2
template<>
void Tree<char*>::inTreeHelper(const char& *data, Leaf<char*> *currentLeafPtr)
и компилятор выдаёт ошибку

15/15-17/Tree.h|28|error: template-id ‘inTreeHelper<>’ for ‘void Tree<char*>::inTreeHelper(const char*, Leaf<char*>*)’ does not match any template declaration|

Помогите разобраться пожалуйста.

Вот полный текст программы:
Leaf.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
#ifndef LEAF_H
#define LEAF_H
 
template<typename T>
class Tree;
 
template<typename T>
class Leaf
{
    friend class Tree<T>;
 
    public:
        Leaf(const T &d)
        {
            left = NULL;
            right = NULL;
            data = d;
        }
 
 
    private:
        Leaf *left;
        Leaf *right;
        T data;
};
 
#endif // LEAF_H
Tree.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
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#ifndef TREE_H
#define TREE_H
 
 
template<typename T>
class Tree
{
    public:
        Tree();
        ~Tree();
        void inTree(const T &);
        void printPreOrderTraversal();
        void printInOrderTraversal();
        void printPostOrderTraversal();
 
    private:
        void destructorHelper(Leaf<T> *);
        void inTreeHelper(const T &, Leaf<T> *);
        void printPreOrderTraversalHelper(Leaf<T> *);
        void printInOrderTraversalHelper(Leaf<T> *);
        void printPostOrderTraversalHelper(Leaf<T> *);
        Leaf<T> *newLeaf(const T &);
        Leaf<T> *root;
};
 
 
template<>
void Tree<char*>::inTreeHelper(const char* &data, Leaf<char*> *currentLeafPtr)
{
    if(currentLeafPtr == NULL)//создаётся корень
    {
        Leaf<char*> *ptr = newLeaf(data);
        root = ptr;
    }
   else if(strcmp(data, currentLeafPtr->data) < 0)
   {
        if(currentLeafPtr->left == NULL)
            currentLeafPtr->left = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->left);
   }
   else if (strcmp(data, currentLeafPtr->data) > 0)
   {
        if(currentLeafPtr->right == NULL)
            currentLeafPtr->right = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->right);
   }
   else
   {
       cout << "Это значение есть в дереве" << endl;
   }
}
 
 
 
template<typename T>
void Tree<T>::inTreeHelper(const T &data, Leaf<T> *currentLeafPtr)
{
    if(currentLeafPtr == NULL)//создаётся корень
    {
        Leaf<T> *ptr = newLeaf(data);
        root = ptr;
    }
   else if(data < currentLeafPtr->data)
   {
        if(currentLeafPtr->left == NULL)
            currentLeafPtr->left = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->left);
   }
   else if (data > currentLeafPtr->data)
   {
        if(currentLeafPtr->right == NULL)
            currentLeafPtr->right = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->right);
   }
   else
   {
       cout << "Это значение есть в дереве" << endl;
   }
}
 
 
template<typename T>
void Tree<T>::printPreOrderTraversalHelper(Leaf<T> *ptr)
{
    if(ptr != NULL)
    {
        if(ptr->left != NULL)
            printPreOrderTraversalHelper(ptr->left);
        cout << ptr->data << ' ';
        if(ptr->right != NULL)
            printPreOrderTraversalHelper(ptr->right);
    }
 
}
 
template<typename T>
void Tree<T>::printInOrderTraversalHelper(Leaf<T> *ptr)
{
    if(ptr != NULL)
    {
        cout << ptr->data << ' ';
        if(ptr->left != NULL)
            printInOrderTraversalHelper(ptr->left);
        if(ptr->right != NULL)
            printInOrderTraversalHelper(ptr->right);
    }
}
 
template<typename T>
void Tree<T>::printPostOrderTraversalHelper(Leaf<T> *ptr)
{
    if(ptr != NULL)
    {
        if(ptr->right != NULL)
            printPostOrderTraversalHelper(ptr->right);
        cout << ptr->data << ' ';
        if(ptr->left != NULL)
            printPostOrderTraversalHelper(ptr->left);
    }
}
 
template<typename T>
void Tree<T>::printPreOrderTraversal()
{
    printPreOrderTraversalHelper(root);
}
 
template<typename T>
void Tree<T>::printInOrderTraversal()
{
    printInOrderTraversalHelper(root);
}
 
template<typename T>
void Tree<T>::printPostOrderTraversal()
{
    printPostOrderTraversalHelper(root);
}
 
template<typename T>
void Tree<T>::destructorHelper(Leaf<T> *ptr)
{
    if(ptr != NULL)
    {
        if(ptr->left != NULL)
        {
            destructorHelper(ptr->left);
            delete ptr->left;
        }
        if(ptr->right != NULL)
        {
            destructorHelper(ptr->right);
            delete ptr->right;
        }
        if(ptr == root)
        {
            delete root;
        }
 
    }
}
 
template<typename T>
Tree<T>::Tree()
{
     root = NULL;
}
 
template<typename T>
Tree<T>::~Tree()
{
    destructorHelper(root);
}
 
template<typename T>
Leaf<T> * Tree<T>::newLeaf(const T &d)
{
    Leaf<T> *ptr = new Leaf<T>(d);
    return ptr;
}
 
template<typename T>
void Tree<T>::inTree(const T &data)
{
    inTreeHelper(data, root);
}
 
#endif // TREE_H
Main.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
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
#include "Leaf.h"
#include "Tree.h"
 
int main()
{
    srand(time(NULL));
    Tree<char*> t;
    char* temp;
    char str[] = "We were all feeling seedy and we were getting quite nervous about it.";
    char space[] = " ";
 
    temp = strtok(str, space);
        t.inTree(temp);
    while(temp = strtok(NULL, space))
        t.inTree(temp);
 
    t.printPreOrderTraversal();
 
    return 0;
}
Добавлено через 17 часов 48 минут
Апну тему. Помогите пожалуйста определить ошибку. :/
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru