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

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

Войти
Регистрация
Восстановить пароль
 
redbird
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 9
#1

Специализация шаблона - C++

31.03.2014, 01:59. Просмотров 566. Ответов 3
Метки нет (Все метки)

Привет, у меня есть вот такой шаблон дерева:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename T = int> 
class Tree{
       struct TreeItem{   // элемент дерева
        T info;   // данные 
        TreeItem*  LSon;  // указатель на левого сына
        TreeItem* RSon;  // указатель на правого сына 
        TreeItem* Father; // необязательно
        TreeItem (const T info){
            this->info = info;
            Father=LSon=RSon=NULL;
        }
        //TreeItem (const T info);
        ~TreeItem(){}
       }
       //методы Tree
};
далее я хочу специализировать конструктор TreeItem для типа char*
пишу вот что
C++
1
2
3
4
5
template <> Tree<char*>::TreeItem::TreeItem(const char* info){
    this->info=new char [strlen(info)+1];
    strcpy(this->info, info);
    Father=LSon=RSon=NULL;
}
MSVS8 на этой специализации выдает вот такую ошибку
error C2244: 'Tree<T>::TreeItem::{ctor}' : unable to match function definition to an existing declaration
1> with
1> [
1> T=char *
1> ]
1> definition
1> 'Tree<T>::TreeItem::TreeItem(const char *)'
1> with
1> [
1> T=char *
1> ]
1> existing declarations
1> 'Tree<T>::TreeItem::TreeItem(const Tree<T>::TreeItem &)'
1> with
1> [
1> T=char *
1> ]
1> 'Tree<T>::TreeItem::TreeItem(const T)'
1> with
1> [
1> T=char *
1> ]



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

Специализация шаблона - C++
Пытаюсь специализировать шаблон для типа float, но не получается. В чем проблема? Компилятор: 1&gt;TemplateArr.obj : error LNK2005:...

Специализация шаблона - C++
Здравствуйте! Задача: Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое...

специализация шаблона - C++
начал разбираться с шаблонами. если есть структура, и одна функция именно с int должна работать по особенному, написать можно вот так. ...

Частичная специализация шаблона - C++
Доброго всем времени суток! Помогите разобраться в следующей ситуации. Есть шаблон класса #include &lt;iostream&gt; using...

Специализация операции шаблона - C++
Доброго времени суток. Имеется шаблон: template&lt;class Type&gt;class Figures { /*...*/ public: /*...*/ void...

Явная специализация шаблона - C++
Здравствуйте. Не совсем разобрася с сабжем. Например, если есть кусочек кода: template &lt;typename T&gt; void func(T &amp;blue, T &amp;red); ...

3
Avazart
Эксперт С++
7232 / 5428 / 303
Регистрация: 10.12.2010
Сообщений: 24,123
Записей в блоге: 17
31.03.2014, 02:09 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
template <> Tree<char*>::TreeItem::TreeItem(const char* info)
Не смущает char* не соответствует const char*
1
redbird
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 9
31.03.2014, 02:12  [ТС] #3
работает, спасибо)

но ведь конструктор описан как TreeItem (const T info), почему const пропадает?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
31.03.2014, 11:15 #4
Цитата Сообщение от redbird Посмотреть сообщение
почему const пропадает?
Он не пропадает. const в той записи применяется ко всему типу целиком. Если ты указал char*, то const будет применен как:
C++
1
char* const info
Получим константный указатель.
1
31.03.2014, 11:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 11:15
Привет! Вот еще темы с ответами:

Явная специализация шаблона - C++
Столкнулся с проблемой при изучении шаблонов. Задача: написать шаблонную функцию, которая принимает в качестве аргумента массив...

Явная специализация шаблона - C++
Здравствуйте, подскажите, пожалуйста, почему не выполняется неявное приведение фактических параметров к формальным при вызове функции для...

Специализация шаблона функции - C++
Как сделать специализированную функцию шаблон на тип int? У меня что-то не получается ..

Специализация шаблона класса - C++
Имеется задание: Создать свой шаблонный класс – динамический массив (myvector). Создать методы этого класса. Инстанцировать для своего...


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

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

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