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

Шаблонный класс. Ошибка : aggregate 'Box<info*> ob' has incomplete type and cannot be defined - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Посчитать количество нулевых элементов в массиве, вывести их индексы http://www.cyberforum.ru/cpp-beginners/thread1303562.html
делаю лабу, наполовину завершил, но наткнулся на эту задачу, хэлп.. Написать программу определения количества и номера индексов нулевых элементов массива вещественных чисел. Вывести на экран...
C++ Функции друзья в отдельном файле Здравствуйте уважаемые программисты ! У меня вопрос. При разбивке проекта, класс поместил в заголовочный файл, а как быть с его функциями друзьями ?) Тоже к нему в хэдер добавить ? Ведь прототип... http://www.cyberforum.ru/cpp-beginners/thread1303547.html
C++ Преобразовать в рекурсивную функцию
Помогите преобразовать следующий код так, чтобы вычисление функции происходило с помощью рекурсии... #include <cstdlib> #include <iostream> #include <math.h> using namespace std;
C++ Объединение чисел в пары
Нужна небольшая помощь. Задание звучит так: Даны n пар положительных чисел: (a1,b1),(a2,b2),...,(An,Bn). Определить: а)в какой паре среднее арифметическое значений чисел является максимальным....
C++ LNK2019: о private и public в классе http://www.cyberforum.ru/cpp-beginners/thread1303538.html
Всем суп, есть беда: // "NAbstractNumber.h" class NAbstractNumber{ NAbstractNumber(){}; virtual std::string toString(int base = 10) const = 0; virtual NAbstractNumber & operator =...
C++ Считывание отрицательных чисел из файла Собственно как считать из файла отрицательное число? Положительные числа считываются нормально, при считывание отрицательных программа зависает. подробнее

Показать сообщение отдельно
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
19.11.2014, 18:15
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Как раз тут на форуме вычитал, что хранение указателей на объекты - один из способов хранения объектов разных типов.
Это так. Только разница в том, что твой класс требует выделения памяти от пользователя всегда. Указатель можно и внутри хранить, необязательно протаскивать его через весь интерфейс. Суть классов и вообще инкапсуляции в том, чтобы более сложные действия и состояния спрятать за более простым интерфейсом. Если делать класс только чтобы был, то эффекта не будет нужного

Цитата Сообщение от Gr1f0nn Посмотреть сообщение
так как не получается просто выделить память и под базовый класс, и под наследника в самом шаблоне.
Ну как же не получается, если я выше дал тебе вполне рабочее решение (в рамках твоей текущей архитектуры)?
Другие дело, что сама архитектура не очень. Но тогда нужно просто с самого начала все продумать заново. Разделить ответственности. Определить сущности их методы их взаимодействия. А потом уже код писать

Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Может здесь может помочь какое-то явное преобразование типов?
Не очень ясно что ты собрался преобразовывать

Добавлено через 7 минут
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Если же писал
C++
1
list<info> ob;
То не работало ^_^
Не работало потому что так был сделан интерфейс шаблона. Нужно же всегда очень четко понимать что ты делаешь и к чему это приводит. Вслепую тыкаться и менять код наугад - плохая практика.

Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Сейчас сделал так:
На самом деле так даже лучше. В твоей задаче, лучше разделить ответственности. Т.е. есть класс который обобщенно (через указатели на базу) хранит указатели на экземпляры твоих объектов. А есть класс, который управляет, сохранением и восстановлением информации в\из файла.

Добавлено через 18 минут
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Необходимо создать класс-контейнер, в котором будет храниться пользовательский базовый-класс и класс-наследник. Класс-контейнер реализовать с помощью шаблона.
Вот задача.
Давай ее разберем.
1. Необходимо создать класс-контейнер с помощью шаблона.
2. В нем будут храниться пользовательский базовый-класс и класс-наследник.
Сначала тебе нужно создать класс-шаблон, который будет реализовывать некий контейнер. Ну пусть это будет список. Шаблон намекает на то, что тип данных, хранимый в списке, может быть произвольно заданным.
Потом, используя созданный класс, необходимо поместить в него экземпляры базового класса и экземпляры наследника. Проще всего, как ты правильно заметил, это реализовать используя полиморфизм и указатели.
Теперь нужно создать некую сущность, которая объединит две предыдущие для решения задачи. Например, сохранение и восстановление информации из файла и занесение ее в наш контейнер.

Итого:
У нас есть класс-список, который может быть параметризован каким-либо типом.
И есть два класса: базовый и наследник, которые отражают какую-то предметную область.
И есть класс-менеджер, который занимается управлением данных в списке и сохранением и восстановлением в файл.

Реализуя список, можно смотреть на интерфейс std::list для образца.

Добавлено через 4 минуты
По поводу реализации списка.
Вот этот ход мыслей правильный:
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Если точнее, то надо, скорее всего, структуру тоже сделать шаблоном:
Только в реализации должно быть так:
C++
1
2
3
4
5
6
template <typename T> 
struct node
{
    node *next, *prev;
    T data_;
};
Т.е. T - это у нас данные. Они и есть параметр шаблона, тип данных, которые мы храним.
node - это у нас внутренняя структура для организации списка. Навигация в памяти осуществляется через указатели на другие такие же node. При правильной реализации методы работы с node должны быть скрыты за интерфейсом list.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru