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

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

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

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

31.03.2014, 01:59. Просмотров 509. Ответов 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> ]



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

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

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

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

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

Почему не срабатывает специализация шаблона? - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; struct box { char mak; float m; float n; float y; float...

Частичная специализация шаблона функции - C++
Добрый день, помогите разобраться в чем проблема кода: template &lt;int X, int Y&gt; bool isSimple(){ return X%Y == 0 &amp;&amp;...

Явная специализация шаблона. Ошибки - C++
Помогите исправить ошибки. Надо для шаблонного класса сделать специализацию float #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Явная специализация шаблона класса и ее методы - C++
На 93 строке явная специализация шаблона класса под char. Но я нигде не могу найти, как мне правильно записать методы для него. Если тело...

Почему не создается специализация шаблона функции - C++
Почему это не работает и как правильно определить operator&lt;&lt; вне тела класса? #include &lt;iostream&gt; using namespace std; template...

Специализация шаблона для стандартных типов - C++
Пишу динамическую структуру данных (не суть важно какую, допустим для простоты стек). Она работает с объектами типа Box, которые: 1....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,385
Записей в блоге: 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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
31.03.2014, 11:15     Специализация шаблона #4
Цитата Сообщение от redbird Посмотреть сообщение
почему const пропадает?
Он не пропадает. const в той записи применяется ко всему типу целиком. Если ты указал char*, то const будет применен как:
C++
1
char* const info
Получим константный указатель.
Yandex
Объявления
31.03.2014, 11:15     Специализация шаблона
Ответ Создать тему
Опции темы

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