Russian Qt Forum
Май 19, 2024, 11:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование template  (Прочитано 3137 раз)
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!

Что вы думаете по этому поводу?
Записан
sandy
Гость
« Ответ #1 : Июль 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;
}

Теперь компиль
А лучше, если класс шаблонный, писать все в одном заголовочнике
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.04 секунд. Запросов: 17.