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

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

Восстановить пароль Регистрация
 
redbird
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 9
31.03.2014, 01:59     Специализация шаблона #1
Привет, у меня есть вот такой шаблон дерева:
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> ]



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

Частичная специализация шаблона C++
C++ Специализация шаблона
C++ Специализация шаблона класса
C++ специализация шаблона функции
C++ специализация шаблона
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
31.03.2014, 02:09     Специализация шаблона #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
template <> Tree<char*>::TreeItem::TreeItem(const char* info)
Не смущает char* не соответствует const char*
redbird
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 9
31.03.2014, 02:12  [ТС]     Специализация шаблона #3
работает, спасибо)

но ведь конструктор описан как TreeItem (const T info), почему const пропадает?
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
31.03.2014, 11:15     Специализация шаблона #4
Цитата Сообщение от redbird Посмотреть сообщение
почему const пропадает?
Он не пропадает. const в той записи применяется ко всему типу целиком. Если ты указал char*, то const будет применен как:
C++
1
char* const info
Получим константный указатель.
Yandex
Объявления
31.03.2014, 11:15     Специализация шаблона
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru