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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
#1

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

29.03.2014, 21:35. Просмотров 291. Ответов 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: необъявленный идентификатор

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

Перегрузка << в шаблоне класса List - C++
Сап. Написал класс, реализующий работу односвязного списка. Для вывода решил использовать перегрузку &lt;&lt; , но тут и начались проблемы (код...

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

Вызов функции в шаблоне класса - C++
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции. Скажите,все ли правильно в вызове функций? вот файл .h ...

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

Перегрузка операторов в шаблоне класса - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;typeinfo&gt; #include &lt;windows.h&gt; using namespace std; template &lt;class Type1,...

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

Перегрузка операций ввода/вывода в шаблоне класса - C++
template &lt;typename T&gt; class Vector { private: T * data; int size; public: Vector(int); friend std::istream &amp;...

Как потоковую функцию в шаблоне класса сделать неинлайновой - C++
Если потоковую функцию описать внутри класса, то все компилируется и собирается. Но если вынести ее код наружу, то функция не...

Перегрузка оператора умножения в шаблоне класса вектора (Visual Studio 2013) - C++
Здравствуйте! Пишу шаблон класса векторов и хочу реализовать в нем перегрузку оператора умножения на число. Сложение, вычитание,...

Error C4519: аргументы шаблона по умолчанию можно использовать только в шаблоне класса - C++
void sort_when_two_threads(Iterator first, Iterator last, Compare comp = std::less&lt;typename std::iterator_traits&lt;Iterator&gt;::value_type&gt;()) ...

Структура класса - C++
Всем привет. Только начал изучать ООП. Вообщем есть задание: Создать класс - дата с полями в закрытой части: день (1-31), месяц (1-12),...

Структура внутри класса - C++
Есть такой вопрос, целесообразно ли делать вот так: class StudentGroup { private: struct Student { string name; string...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6909 / 4102 / 933
Регистрация: 30.01.2014
Сообщений: 6,893
29.03.2014, 22:24     Структура в шаблоне класса #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
HenryDukart, вот так
C++
1
2
3
4
5
template <typename T>
typename Tree<T>::TreeNode* Tree <T>::Clone(TreeNode*s)
{
......
}
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
29.03.2014, 22:38  [ТС]     Структура в шаблоне класса #3
Спасибо большое, помогло. Как такая конструкция называется?
DrOffset
6909 / 4102 / 933
Регистрация: 30.01.2014
Сообщений: 6,893
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.
Yandex
Объявления
29.03.2014, 22:49     Структура в шаблоне класса
Ответ Создать тему
Опции темы

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