Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Vashanka Гость
|
Добавлено: Сб Ноя 30 2002 17:18 Заголовок сообщения: Проблема линковки функций параметризированного класса в другом модуле |
|
|
(!) Угловые скобки заменены на '. Форум здесь такой.
В отдельном файле carray.cpp лежит параметризированный класс вида приблизительно такого:
template 'class Type' class CArray { public: CArray( void ); ~CArray( void ); ........ }
Доступ к нему нужно получить из main.cpp:
CArray'char' Array;
Компилируется и линкуется так: bcc -v -y -c carray.cpp bcc -v -y main.cpp carray.obj
Линкер ругается:
Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International Error: Undefined symbol CArray'char'::~CArray'char'() in module main.cpp Error: Undefined symbol CArray'char'::CArray'char'() in module main.cpp
Но если попытаться создать main() в carray.cpp и создать объект -- нет проблем. Кто виноват и как это исправить?
Тестировались BC5.0 и VC6.0. |
|
Вернуться к началу |
|
|
Vashanka Гость
|
Добавлено: Вс Дек 01 2002 12:13 Заголовок сообщения: Re: Проблема линковки функций параметризированного класса в другом модуле |
|
|
(!) Угловые скобки заменены на '. Форум здесь такой.
Проблема решилась вынесением "кода" (псевдокода) параметризированного шаблона в заголовочный файл. Теперь это выглядит так (вдруг кто-то еще наступит на эти грабли ): #ifndef __CARRAY_HEADER__ #define __CARRAY_HEADER__ template 'class ElementType' class CArray { public: CArray( void ); ~CArray( void ); ..... другие функции ...... } template 'class ElementType' CArray'ElementType' :: CArray( void ) { cout«"CArray created\n"; } template 'class ElementType' CArray'ElementType' :: ~CArray( void ) { cout«"CArray destroyed\n"; } ..... другие функции ...... #endif // __CARRAY_HEADER__ Всем привет! |
|
Вернуться к началу |
|
|
|