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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование с template + stack, Можна такое сделать? 
:(
    Опции темы
lyubic
Дата 27.9.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет.  Есть шаблон 
Код

template<class C> class One {
protected:
    list<C> List1;        
    bool TruthValue;
public:
               // ....
};


Можна ли наследовать с него такой:
Код

class Two :                
    public One<Two>{ 
protected:
    string Str1;
    stack <Two> Stack1;
public:
                // ........
};


У меня проблема с stack<Two>, компилятор сообщает что неверное обявление (Microsoft Visual Studio .NET 2003).
Спасибо.
P.S.  smile ..... если можна ...
PM MAIL ICQ   Вверх
albertn
Дата 27.9.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добавь
Код

#include <stack>

ИМХО какое-то странное объявление, получается, что он чуть ли не сам себя наследует.
Код

class Two :                
    public One<Two>

PM WWW ICQ   Вверх
lyubic
Дата 27.9.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Добавь
код C++ 
1: #include <stack>

добавлено .... не пашет

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



lyubic, 
Весь код давай! smile 
PM MAIL WWW   Вверх
Nastya
Дата 27.9.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



а namespace не забыл ?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Earnest
Дата 27.9.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Нельзя. Получается рекурсивное определение: тип A  содержит стек объектов A (которые в свою очередь будут содержать стеки объектов A, которые ...).
Если такое бешеное вложение действительно необходимо, храни в стеке указатели. Хотя лучше подумай над структурой данных: явно что-то не то. 


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



поскольку стек хранит не сами объекты, а указатель (по сути - вектор), то такой вариант вполне возможен. Нужно определить прототип класса перед инициализацией шаблона stack.

class Two;//форвард класса

template<class C> class One {
        ...
};

class Two : public One<Two>{ 
        ...
};

Добавлено @ 18:36 
ан нет, не прокатит, deque генерит enum c sizeof (Two), а sizeof - оператор хитрый, вместо stack используй vector он не смотрит на размер.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 27.9.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



или смени контейнер на вектор:
Код

std::stack<Two,std::vector<Two> > Stack1;



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Daevaorn
Дата 27.9.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(GremlinProg @  27.9.2006,  19:40 Найти цитируемый пост)
или смени контейнер на вектор:

Это вообще скомпилируется?smile
PM MAIL WWW   Вверх
GremlinProg
Дата 28.9.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



да


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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