Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с функцией, добавление элемнта в контейнер 
V
    Опции темы
azesmcar
Дата 2.6.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Riddik

Желательно было бы посмотреть на код. использование template<typename T> вместо template<class T> может помочь
PM   Вверх
Riddik
Дата 2.6.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



azesmcar, 

Не помогло. Что-то я не так сделал. Код уже большой - привожу точный макет проблемного места:

Код

class Big 
{
std::vector<base*> pb;
public:
template<class T> void add() {pb.push_back(new T);}
};

class der : public base
{
public:
der();
~der();
};

Big Just;
Just.add<der>();


PM MAIL   Вверх
zim22
Дата 2.6.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Riddik @  2.6.2009,  12:29 Найти цитируемый пост)
 Что-то я не так сделал

Код

#include <vector>

class base {
public:
  virtual ~base() = 0 { }
};
class Big {
  std::vector<base*> pb;
public:  
  template<class T> 
  void add() {pb.push_back(new T);}
};

class der : public base
{
public:
  der(){}
  ~der(){}
};


int _tmain(int argc, _TCHAR* argv[])
{
  Big just;
  just.add<der>();

    return 0;
}



--------------------
PM MAIL   Вверх
Riddik
Дата 2.6.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



zim22, у меня в точности так. smile 
разве только что вместо 
Код

 virtual ~base() = 0 { }



у меня 
Код

 virtual ~base() { }



PM MAIL   Вверх
zim22
Дата 2.6.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Riddik @  2.6.2009,  13:09 Найти цитируемый пост)
у меня в точности так

у меня работает. опять наверно из-за различных компиляторов проблема... 
***
чтобы в gcc работало, нужно определение деструктора вынести за класс
Код

class base {
public:
  virtual ~base() = 0;
};
base::~base() { }


Это сообщение отредактировал(а) zim22 - 2.6.2009, 13:13


--------------------
PM MAIL   Вверх
mes
Дата 2.6.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Riddik @  2.6.2009,  12:09 Найти цитируемый пост)
zim22, у меня в точности так. smile 

т.е. вариант zim22 у Вас не работает ? тогда скажите какой компилятор Вы используйте.

Добавлено через 1 минуту и 32 секунды
и вообще не понимаю зачем мудрить можно же просто передавать готовый объект на хранение.
Вот пример показывающий оба способа. Я бы выбрал второй.
Код

#include <iostream>
#include <vector>

class Base
{
    public:
         virtual ~Base () {}
};
class Derived : public Base
{
    public:
        Derived () { std::cout << "created"<<std::endl; }
};

class Container
{
    public:
        template <class T> void add () { m_vec.push_back(new T()); } // 1.
        void add (Base *p)             { m_vec.push_back(p);       } // 2.


    private:
        std::vector<Base*> m_vec;

};

int main()
{
    Container c;

    c.add<Derived>();        // 1.
    c.add (new Derived());   // 2.

    system ("pause");
   return 0;
}



--------------------
PM MAIL WWW   Вверх
Riddik
Дата 2.6.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Компилятор VC++ 6.0

Ваш второй способ, скорее всего, в моём случае подойдёт. Сейчас ещё прикину smile
PM MAIL   Вверх
zim22
Дата 2.6.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Riddik @  2.6.2009,  13:18 Найти цитируемый пост)
Компилятор VC++ 6.0

эээ, без комментариев. на нём ещё мой дедушка программировал smile


--------------------
PM MAIL   Вверх
mes
Дата 2.6.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Riddik @  2.6.2009,  12:18 Найти цитируемый пост)
Компилятор VC++ 6.0

берите тогда второй способ и не ищите лишних проблем smile



--------------------
PM MAIL WWW   Вверх
Riddik
Дата 2.6.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Есть и експресс 2008, но привычка...smile

Спасибо за всё!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.