Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
1

Структура в шаблоне класса

29.03.2014, 21:35. Просмотров 846. Ответов 3
Метки нет (Все метки)

Есть у меня класс бинарного поискового дерева. В нем описана структура TreeNode элемента дерева.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T= int>
class Tree
{
private:
    struct TreeNode
    {
        T info;
        TreeNode *left, *right;
        TreeNode()
        {right=left=NULL;}
    };
    TreeNode *root;
    TreeNode* Clone (TreeNode*);
        .....
public:
        .....
};
Компилятор выдает ошибки на заголовке реализации метода Clone
C++
1
2
3
4
5
template <typename T>
TreeNode* Tree <T>::Clone(TreeNode*s)
{
   ....
}
Выдаёт ошибки:
error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
error C2065: T: необъявленный идентификатор

Помогите, пожалуйста, решить проблему.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 21:35
Ответы с готовыми решениями:

Как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса
Здравствуйте. А как описывать функции, заданные в шаблоне класса, тип...

Вызов функции в шаблоне класса
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции....

Перегрузка << в шаблоне класса List
Сап. Написал класс, реализующий работу односвязного списка. Для вывода решил...

Не типовые параметры в шаблоне класса
Начал изучать шаблоны и вроде все было хорошо, но в задании с использованием в...

Перегрузка операторов в шаблоне класса
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;typeinfo&gt; #include...

3
DrOffset
8464 / 4741 / 1161
Регистрация: 30.01.2014
Сообщений: 7,727
29.03.2014, 22:24 2
Лучший ответ Сообщение было отмечено HenryDukart как решение

Решение

HenryDukart, вот так
C++
1
2
3
4
5
template <typename T>
typename Tree<T>::TreeNode* Tree <T>::Clone(TreeNode*s)
{
......
}
0
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
29.03.2014, 22:38  [ТС] 3
Спасибо большое, помогло. Как такая конструкция называется?
0
DrOffset
8464 / 4741 / 1161
Регистрация: 30.01.2014
Сообщений: 7,727
29.03.2014, 22:49 4
HenryDukart, тут две конструкции:
1) При определении возвращаемого значения функции класса не учитывается scope этого класса для поиска имен. Поэтому структура определенная внутри не видна.
Вот пример без шаблона:
C++
1
2
3
Tree::TreeNode * Tree::Clone(TreeNode*s) // нужно явно указать что TreeNode принадлежит Tree
{
}
Когда же мы определяем параметр, то scope класса включается в поиск имен и все проходит нормально. Хотя никто не запретит написать так:
C++
1
2
3
Tree::TreeNode * Tree::Clone(Tree::TreeNode*s)
{
}
И это тоже будет правильно.
2) Теперь к шаблонам. Имя TreeNode в нашем контексте является так называемым зависимым именем. То есть чем является нечто под названием TreeNode зависит от параметра T (еще бы, мы же определили ее внутри шаблона). При разрешении зависимых имен нет возможности узнать является ли имя типом или чем-то другим. Для того, чтобы подсказать компилятору, что TreeNode - это именно тип (а не константа или функция), используется ключевое слово typename.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 22:49

Перегрузка оператора = в шаблоне класса
Доброго дня! Возник такой вот вопрос: я сделал шаблон класса и пытаюсь...

Ошибка в шаблоне класса (вывод в поток)
Помогите пожалуйста понять что не так: // list.h template&lt;class K, class...

Перегрузка операций ввода/вывода в шаблоне класса
template &lt;typename T&gt; class Vector { private: T * data; int size;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru