Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / вынести из шаблона другой шаблон / 7 сообщений из 7, страница 1 из 1
26.08.2007, 18:59
    #34753174
dik_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
хочу к классу дерева (tree) добавит итератор... и с этим возникли большие сложности

когда было так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
template <class T,class K>class tree;
//---------------------------------------------------------
template <class T,class K>class tree
{
	...				// методы и всё что относится к классу дерева
	class iterator
	{
		tree<K,T>* dp;		 //указатель на дерево
		node* tek;		//указатель на текущий узел в дереве
	public:
		iterator(tree<K,T>* v) {.....}
		........
	};
	friend class iterator;
};
всё работало. а я хочу итератор оформить в виде шаблона и вынести этот шаблон итератора за пределы шаблона дерева....
как это сделать?
Бьюсь уже не первый день. помогите пож-та!!! или это невозможно сделать???
...
Рейтинг: 0 / 0
26.08.2007, 20:36
    #34753236
daevaorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
dik_k
всё работало. а я хочу итератор оформить в виде шаблона и вынести этот шаблон итератора за пределы шаблона дерева....
как это сделать?

а в чем проблема то? всё можно.
...
Рейтинг: 0 / 0
26.08.2007, 23:17
    #34753317
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
dik_k пишет:
> Автор: "dik_k"
> хочу к классу дерева (tree) добавит итератор... и с этим возникли
> большие сложности
>
> когда было так:
>
> template <class T,class K>class tree;
> //---------------------------------------------------------
> template <class T,class K>class tree
> {
> \t...\t\t\t\t// методы и всё что относится к классу дерева
> \tclass iterator
> \t{
> \t\ttree<K,T>* dp;\t\t //указатель на дерево
> \t\tnode* tek;\t\t//указатель на текущий узел в дереве
> \tpublic:
> \t\titerator(tree<K,T>* v) {.....}
> \t\t........
> \t};
> \tfriend class iterator;
> };

friend class tree::iterator; // ???
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29.08.2007, 12:34
    #34760966
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
Ечли я правильно понял, о чем речь, то примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
template <class T,class K> class iterator;

template <class T,class K>
class tree
{
	friend class iterator<T,K>;
};

template <class T,class K>
class iterator
{
public:
	typedef tree<K,T> tree_type;
	iterator(tree<K,T>* v) {}

private:
	tree_type* dp;		 //указатель на дерево
	node* tek;		//указатель на текущий узел в дереве
};
...
Рейтинг: 0 / 0
05.09.2007, 07:03
    #34776185
dik_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
terasв итоге 22 ошибки.
на строке
Код: plaintext
node* tek;
выдается 3 ошибки:
Код: plaintext
1.
2.
error C2143: syntax error : missing ';' before '*'
error C2501: 'node' : missing storage-class or type specifiers
error C2501: 'tek' : missing storage-class or type specifiers
попробовал изменить этот код на такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
template class iterator<class T, class K>
{
public:
	typedef tree<T,K> tree_type;
	typedef tree<T,K>::node tree_node;
private:
	tree_node* tek;//указатель на текущий узел в дереве
.....
};
вообще ошибками завалил...


строку
Код: plaintext
int case_menu(tree<int,int>* A,tree<int,int>::iterator *it)
изменил соответсвенно на строку:
Код: plaintext
int case_menu(tree<int,int>* A,tree<int,int>::iterator<int,int> *it)
тоже гора ошибок.

так как правильно разделить шаблоны?
...
Рейтинг: 0 / 0
05.09.2007, 10:24
    #34776543
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
typename понаставь
...
Рейтинг: 0 / 0
05.09.2007, 16:35
    #34778461
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынести из шаблона другой шаблон
dik_kтак как правильно разделить шаблоны? Вот причины ошибок:
- нужно объявить в классе tree структуру node;
- при ссылках на вложенные типы не забывайте ставить typename [typedef typename tree<K,T>::node node]
- вынеся класс на верхний уровень и ссылаться на него нужно от верхнего уровня [int case_menu(tree<int,int>* A, iterator<int,int> *it)]

в таком виде без про,лем компилируется msvc 2005 и gcc 3.4:
Код: plaintext
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.
template <class T,class K> class iterator;

template <class T,class K>
class tree
{
	friend class iterator<T,K>;
	struct node
	{
	};
};

template <class T,class K>
class iterator
{
public:
	typedef tree<K,T> tree_type;
	typedef typename tree<K,T>::node node;

	iterator(tree<K,T>* v) {}

private:
	tree_type* dp;		 //указатель на дерево
	node* tek;		//указатель на текущий узел в дереве
};

int case_menu(tree<int,int>* A, iterator<int,int> *it)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / вынести из шаблона другой шаблон / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]