Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование template

6.2K
10 июля 2007 года
abdyla_v
40 / / 02.02.2006
У меня есть файл Tstack.h :

#ifndef TSTACK_
#define TSTACK_

template <class T>
class TStack
{
T m_Value;

public:
T GetValue( void );
void SetValue( T value );

};
template<class T>
T TStack<T>::GetValue( void )
{
return m_Value;
}
template<class T> void TStack<T>::SetValue( T value )
{
m_Value = value;
}
#endif

Файл main.cpp :
#include "stdafx.h"
#include "Tstack.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
TStack<float> t;
float x;
t.SetValue( 5.3 );
x = t.GetValue();
cout << x << endl;
}

Как видно выше обьявления класа и его реализация находятся в одном файле Tstack.h! При попытке поместить реализацию в отдельный файл Tstack.cpp получилось два файла.
Tstack.h :

#ifndef TSTACK_
#define TSTACK_

template <class T>
class TStack
{
T m_Value;

public:
T GetValue( void );
void SetValue( T value );

};
#endif

Tstack.cpp :

#include "stdafx.h"
#include "Tstack.h"

template<class T>
T TStack<T>::GetValue( void )
{
return m_Value;
}
template<class T> void TStack<T>::SetValue( T value )
{
m_Value = value;
}

При попитке откомпилировать даный код компилятор выдает ошибку при линковке! Подозреваю что это связано с особеностю обьявления template!

Что вы думаете по этому поводу?
240
10 июля 2007 года
aks
2.5K / / 14.07.2006
abdyla_v, а пользоваться поиском? Ведь милион раз уже обсуждалось на форуме, да и в любой книжке по C++ ))
Шаблоны надо реализовывать там же где они описанны, так как окончательно шаблонный класс определяется только в момент инициализации его типом. Тогда же и создаются его методы по шаблонной реализации.
92
10 июля 2007 года
Тень Пса
2.2K / / 19.10.2006
кхкх... и дабы на будущее человек знал - [COLOR=Red]ОФОРМЛЯЙТЕ КОД СПЕЦИАЛЬНЫМИ ТЕГАМИ![/COLOR] пожалуйста :)
309
11 июля 2007 года
el scorpio
1.1K / / 19.09.2006
Скажу проще. Если реализация шаблона находится в .cpp, то при продключении файла .h, компилятор не может создать код методов шаблонного класса для конкретного типа данных.
Значит, надо либо делать #include "шаблон.hpp", чтобы компилятор мог использовать текст шаблона, либо всё писать в .h файле. Правильным является второй способ.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог