Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unix1 / 3 сообщений из 3, страница 1 из 1
16.05.2005, 18:13
    #33068051
teamplate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unix1
Описываю шаблон в класе как public:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class TClass1: public TFrame
{
private:	// User declarations
public:		// User declarations
	template <class TFrame> SwichRegim ();
}
extern TClass1 *Class1;

Пытаюсь вызвать тимплатовчкую функцию SwichRegim () из метода
другого класса

Код: plaintext
1.
2.
3.
4.
void __fastcall TClass2::spbMoreDetailClick(TObject *Sender)
{
	Class1->SwichRegim<TClass2 >();
}

Получаю ошибку линкера :
[Linker Error] Unresolved external 'int TClass1::SwichRegim<TClass2 >()' referenced from C:\PROJECTS\PERSONAL.OBJ

В чем тут может быть дело , и могут ли template описан в public ???
...
Рейтинг: 0 / 0
16.05.2005, 18:35
    #33068099
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unix1
Определение шаблона этой функции должно быть доступно в точке инстанцирования, то есть, в точке вызова, поэтому помести реализацию в тело класса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class TClass1: public TFrame
{
private:	// User declarations
public:		// User declarations
	template <class TFrame> SwichRegim ()
             {
                  ...
             }
};
 

Считай, что шаблон это макрос - проще будет въехать почему его тело должно быть доступно при подстановке конкретных параметров шаблона(инстанцирование).

Правда, есть компиляторы, которые поддерживают экпорт шаблонов, но это уже другая история.
...
Рейтинг: 0 / 0
16.05.2005, 19:06
    #33068174
Template
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unix1
Анатолий Широков
Спасибо , помог ...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unix1 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]