![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dogo |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Задача:"Разработать классы необходимые для реализации структуры дерево(не бинарное), с последующей возможностью хранения данных - Первый уровень вложенности - Дата, второй - Время, третий - Заметка"
Загвоздка в том что предпологается что узлы дерева будут хранить информацию различных типов. ума не приложу как такое реализовать. В тупик загнали шаблоны, помогите разобраться. Node.h
Node.cpp
Tree.h
Tree.cpp
Notepad.cpp
При компиляции в Microsoft Visual Studio .NET 2003 Возникает такая ошибка : notepad.cpp(13) : error C2440: '=' : cannot convert from 'Node<NODE_DATA> *' to 'Node<NODE_DATA> *' with [ NODE_DATA=int ] and [ NODE_DATA=char * ] Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Это сообщение отредактировал(а) Dogo - 15.7.2007, 21:56 --------------------
|
||||||||||
|
|||||||||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
ну все правильно..
root есть Node<char*>* , вы присваиваете ему Node<int>* ..... ежели так хотите поприсваивать на указателях - использовать явное приведение типов надо, однако, я пологаю, это не предпологалось. Это сообщение отредактировал(а) jonie - 15.7.2007, 22:59 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Да я понимаю, что тут без ошибки не могло обойтись. Собственно вопрос не в этом. Предпологается что дерево будет хранить несколько типов данных. Дату, время и заметку. Для каждого из которых созданы классы Date, myTime, Note. То есть узел может хранить как дату так и время. Но при моем коде если дерево создано с типом char * , то никакие другие типы использовать не получается. А нужно
Вот как это реализовать я сообразить и не могу --------------------
|
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
используй void* (приведение в void* идет неявно) ; или приводи типы явно, например используя reinterpret_cast.
но вообще это так не делается.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Тем плохо, что каждый тип должен хранится в своем классе. дата в классе Date, время в классе Time, а заметка в классе Note. В свою очередь дерево состоит из связаных между собой объектов класса Node. Класс Node может в себе хранить объект класса Date, Time или Note. Не одновременно, а что-то одно, то есть первый уровень вложенности хранит Дату, второй Время, третий Заметку.
Вот так дожно выглядеть дерево: root // Node<char*> Date_1 // Node<Date> Time_D1_1 // Node<Time> Time_D1_2 // Node<Time> Note_D1_T2_1 // Node<Note> ... Note_D1_T2_n // Node<Note> ... Time_D1_t // Node<Time> Date_2 // Node<Date> Time_D2_1 // Node<Time> ... Time_D2_t1 // Node<Time> ... Date_d // Node<Date> Это сообщение отредактировал(а) Dogo - 16.7.2007, 01:22 --------------------
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
ну можно пойти как тупые американцы )
в дереве же хранить NodeBase*.... и делать соотв. приведение типов) а можно просто void* о чем я говорил ранее.... вообще можно пойти еще более простым путем : имеем vector<TDate>, каждый элемент TDate имеет "в себе" vector<TTime>, каждый элемент TTime имеет "в себе" vector<Tnode>. если б0льшая вложенность не предусматривается).. ну и vector можно заменить на иной контейнер. и забыть про дерево ) Это сообщение отредактировал(а) jonie - 16.7.2007, 10:19 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Можно поподробнее о приведении производных типов...
--------------------
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
это ООП в C++. Почитай учебник.
вкратце
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Спасибо.
--------------------
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
reinterpret_cast служит для преобразования указателей, а не "классов".
т.е.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |