Название: Использование template Отправлено: Vitaly_ от Июля 10, 2007, 10:28 У меня есть файл 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! Что вы думаете по этому поводу? Название: Re: Использование template Отправлено: sandy от Июля 10, 2007, 13:19 Цитата: "Vitaly_" При попытке поместить реализацию в отдельный файл Tstack.cpp получилось два файла... При попитке откомпилировать даный код компилятор выдает ошибку при линковке! Подозреваю что это связано с особеностю обьявления template! Что вы думаете по этому поводу? Файл main.cpp : #include "stdafx.h" #include "Tstack.h" #include "Tstack.cpp" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { TStack<float> t; float x; t.SetValue( 5.3 ); x = t.GetValue(); cout << x << endl; } Теперь компиль А лучше, если класс шаблонный, писать все в одном заголовочнике |