Russian Qt Forum

Программирование => С/C++ => Тема начата: Vitaly_ от Июля 10, 2007, 10:28



Название: Использование 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;
}

Теперь компиль
А лучше, если класс шаблонный, писать все в одном заголовочнике