2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
||||||
1 | ||||||
Проблема с typedef.... не виден новый тип данных!29.11.2011, 15:16. Показов 5254. Ответов 62
Метки нет (Все метки)
Пишу шаблон класса множество, у множеств элементы могут быть разного типа, одно, например, целочисленное, другое - строка.
Пользователю дается возможность выбрать тип, с которым ему работать. Тип выбирается через функцию MenuType() и через свитч конкретизируется... но сразу за границей свича новый тип данных становится недоступным. Как решить эту проблему? вот фрагмент кода, в котором все и происходит.
0
|
29.11.2011, 15:16 | |
Ответы с готовыми решениями:
62
Новый тип данных тип typedef Создать новый тип данных на Си Новый тип данных в объявлении метода класса |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
29.11.2011, 17:07 | 21 |
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 17:12 [ТС] | 22 |
Я не работал с boost::any, boost::variant или void*. Интернет что-то не охотно выдает информацию....
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
29.11.2011, 17:15 | 23 |
Fantom.AS, http://www.boost.org/doc/libs/1_48_0/ там и про Any и про Variant найдете.
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 17:17 [ТС] | 24 |
я Инглиш не знаю так еще, чтобы свободно читать на нем, а переводчик выдает бред
0
|
Заблокирован
|
|
29.11.2011, 17:34 | 25 |
Буст не для новичков. К тому же, он не входит в стандарт, поэтому не факт, что он у вас вообще есть в наличии.
К тому же, если я правильно понял политику вашего учебного заведения, вам щас нужно учиться строить собственные классы типа "множество", а не пользоваться всем готовеньким.
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 17:48 [ТС] | 27 |
Да, Вы правильно поняли. Сначала, говорят, учитесь свои писать, а потом, если хотите, можете пользоваться STL-вскими....
0
|
Заблокирован
|
|
29.11.2011, 17:53 | 28 |
Тогда временно забудь об STL, и о Boost
Выкручивайся своими силами) В твоем распоряжении вся мощь и гибкость самого лучшего языка в мире) И первое, что тебе следует сделать - это довести до ума свой класс множеств. Только тогда, когда ты убедишься, что он работает чётко как часики, и делает именно то, что ты от него ожидаешь - только тогда с его помощью можно будит решать более сложные задачи.
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 18:06 [ТС] | 29 |
он то работает и хорошо отлажен, только изначально он был написан не как шаблон, я его сейчас переделываю.
Я и так вперед своих одногруппников иду, они через дин. массив делают, а я через двусзвязный список
0
|
Заблокирован
|
|
29.11.2011, 18:12 | 30 |
Обычные классы обычно разбивают на хэдэр и реализацию.
Соответственно, хэдэр живет в файле *.h А Реализация живет в файле с расширением *.cpp Но в случае с шаблонами ситуация несколько иная. Шаблон класса нельзя просто так таким же образом разбивать на два файла. Однако, в приведенном вами коде у вас присутствует подобное разделение. Поэтому, возможно ваш класс плохо пахнет. Тем более, вы говорили, что с ним "что-то не так". Вы точно уверены в надёжности вашего класса?
1
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 18:14 [ТС] | 31 |
да, класс работает надежно, без ошибок в обычном виде, не как шаблон...
возможно у меня проблема с тем, как правильно передать параметр шаблона....
0
|
Заблокирован
|
||||||
29.11.2011, 18:20 | 32 | |||||
Для начала, запихайте всю реализацию методов шаблона класса в тот же файл, где объявляется заголовок шаблона.
Должно получиться что-то вроде:
Никакого разделения на два файла. Всё в одной куче. После чего избавтесь от ставшего ненужным файла cpp И снова скомпилируйте программу. Возможно, если сам класс стабилен, то все заработает как нужно
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 18:33 [ТС] | 33 |
это-то да, но я зачем-то все с Data и прочие Type поудалял, пытаюсь написать заново....
не уверен, как правильно в функцию, у которой в качестве параметра массив указателей идет, как там правильно параметр шаблона написать.... Добавлено через 9 минут так, все работает... осталось придумать, как менять тип....
0
|
Заблокирован
|
||||||
29.11.2011, 18:34 | 34 | |||||
Fantom.AS, забудь про эту дату. Это была лишь иллюстрация того, как можно "запоминать" типы данных в рантайме, и не более того.
У тебя задача, если я правильно понял, иная: Тебе нужно сначала запросить у пользователя тип данных. А потом создать контейнер "множество" для этого типа данных. Да так, что бы можно было с ним потом дальше работать. Как это можно сделать? Ну например так:
Нам же нужно, что бы: 1. Он остался жив (намек в сторону динамической или статической памяти) 2. Что бы после его создание "нечто" знало контейнер какого типа именно был создан внутри блока свитча. И что бы это "нечто" передать эти знания тому коду, которому понадобится работать с контейнером
0
|
2 / 1 / 2
Регистрация: 17.11.2010
Сообщений: 121
|
|
29.11.2011, 18:35 [ТС] | 35 |
А можно ли в глобальной области определить Type, а потом его переопределить? или так не будет работать?
0
|
Заблокирован
|
||||||
29.11.2011, 19:56 | 37 | |||||
Самый просто способ: сделать обёртку над контейнером, и продублировать весь интерфейс контейнера.
Обертка будит запоминать какой тип контейнера заказал пользователь, и работать с контейнером такого типа. Хотя, конечно способ топорный и унылый. Но и задание само по себе пахнет фейлофой архитектурой: Сделал набросок на примере вектора. Но передалть под самодельное множество не долго.
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
29.11.2011, 20:19 | 38 | |||||
Bers, Интересный вариант. Но в данном случае оверхед.
Достаточно перенести выполнение задачи в функцию.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
29.11.2011, 20:34 | 40 |
Bers, Зачем переносить функционал контейнера? У контейнера итак есть функционал. Нам остается написать только 1 функцию, которая работает с контейнером заданного типа.
0
|
29.11.2011, 20:34 | |
29.11.2011, 20:34 | |
Помогаю со студенческими работами здесь
40
Как на VB 7 создать новый тип данных(свой)? Функциональный тип через typedef Определяя класс в PHP, мы создаем новый ТИП данных? Проблема с typedef и FILE* Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |