![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Beginner |
|
|||
|
Unregistered |
Даже простейшее использование template в программе выбрасывает с треском.Ошибок при компиляции нет.
Посоветуйте плз что предпринять. |
|||
|
||||
| TwoK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Что предпринять? Предотвратить выброс с треском всеми возможными способами.
Сколько себя помню и сколько рассказывали - команд процессора, вызывающих выброс с треском, нет. Поподробнее нельзя описать, в чем заключается "выброс с треском"? Телепатов нет. (с)кто-то с этого форума -------------------- Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше... |
|||
|
||||
| Beginner |
|
|||
|
Unregistered |
Попытался локализовать.Решил проблему включением файла Stack.cpp
в main.cpp хотя Stack.h там уже есть. Все равно не понял ни черта |
|||
|
||||
| TwoK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Алекс - Юстасу, не иначе
Код бы положить - так ведь никак прямо. -------------------- Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше... |
|||
|
||||
| Beginner |
|
|||
|
Unregistered |
Юстас Борману - код простейший Stack взят из Дейтел анд Дейтел глава 12
|
|||
|
||||
| automax |
|
|||
|
Unregistered |
Столкнулся с этой же проблемой. Не удается разделить объявление и определение шаблона в разные файлы. А потом в программе использовать только заголовочный файл. Страуструп говорит что нужно использовать ключевое слово export. Но как, понять не могу. Помогите проект начинает гореть.
|
|||
|
||||
| automax |
|
|||
|
Unregistered |
А вот и исходник:
//Файл tool.h #ifndef _TOOL_H #define _TOOL_H const size_t defStackSize = 10; template <class T> class TStack { public: TStack(size_t size=defStackSize) { numItems = 0; items = new T[size]; } ~TStack() { delete[] items; } void push(T t); protected: int numItems; T *items; }; #endif //Файл tool.cpp #include "tool.h" template <class T> void TStack<T>::push(T t) { items[++numItems] = t; } //Файл main.cpp #include "tool.h" void main() { TStack<int> stck(10); stck.push(5); } Компиляция пройдет без проблем. Но вот при создании exe файла будет выдана ошибка LNK2001 (VC++ 6.0) |
|||
|
||||
| automax |
|
|||
|
Unregistered |
Похоже что проблема не решима теоритически. Делов том что для того чтобы компилятор смог создать класс по шаблону, ему нужно не только ооъявление шаблона, но и его определение, иначе он не сможет постороить класс. Поэтому в то место где по шаблону строится класс компилятору надо передать и файл с объявление и файл с определением шаблона. Что по-моему очень резко ограничивает использование шаблонов. Так как пользователю своей библиотеки мне придется передать не только объявление интерфейса, но и полную его реализацию.
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Совершенно верно. Что касается ограничений, так сейчас немало библиотек с использоанием шаблонов. Конечно, неудобство есть, никто не отрицает, однако само по себе преимущество исползования шаблонов, на мой взгляд, его окупает. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |