1 / 1 / 1
Регистрация: 08.07.2012
Сообщений: 23
1

Шаблон класса

15.01.2013, 18:38. Показов 577. Ответов 3
Метки нет (Все метки)

//файл T_Point_template.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//---------------------------------------------------------------------------
#ifndef T_Point_templateH
#define T_Point_templateH
#include <vcl.h>
#include <math.h>
#include <stdio.h>
//---------------------------------------------------------------------------
template <class Type>
class T_Point
{
    protected:
        Type x,y;
    public:
        T_Point();
        T_Point(Type,Type);
        T_Point(TPoint);
        T_Point(const T_Point &);
        ~T_Point(){}
        bool operator == (T_Point);
        bool operator !=(T_Point);
        operator TPoint();
        T_Point& operator = (const T_Point &);
        T_Point Symetry(T_Point);
        char* toChar(int);
        float Distance(T_Point);
        Type GetX(){return x;}
        Type GetY(){return y;}
        void Draw(TCanvas *,const TColor &);
        void Init(Type,Type);
        void SetX(Type _x){x=_x;}
        void SetY(Type _y){y=_y;}
};
//---------------------------------------------------------------------------
typedef T_Point < float > fT_Point;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#endif

//T_Point_template.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma hdrstop
#include "T_Point_template.h"
#pragma package(smart_init)
template <class Type>
T_Point< Type >::T_Point(Type _x,Type _y)
{
    x=_x;
    y=_y;
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::T_Point()
{
    x=y=0;
}
//---------------------------------------------------------------------------
//Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include "T_Point_template.h"
#pragma argsused
int main(int argc, char* argv[])
{
    fT_Point t1(5,7);
    T_Point <int> t2;
    return 0;
}
//---------------------------------------------------------------------------
почему выдает ошибку:
[Linker Error] Unresolved external 'T_Point<float>::T_Point<float>(float, float)' referenced from D:\РОЗВАГИ\ПРОГРАМИ С++\МОЯ БІБЛІОТЕКА\T_POINT\НОВАЯ ПАПКА\UNIT1.OBJ
[Linker Error] Unresolved external 'T_Point<int>::T_Point<int>()' referenced from D:\РОЗВАГИ\ПРОГРАМИ С++\МОЯ БІБЛІОТЕКА\T_POINT\НОВАЯ ПАПКА\UNIT1.OBJ
помогите, пожалуста

Добавлено через 5 минут
если нужно, вот полный файл T_Point_template.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//---------------------------------------------------------------------------
#pragma hdrstop
#include "T_Point_template.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
template <class Type>
float T_Point< Type >::Distance(T_Point p)
{
    return sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::T_Point(Type _x,Type _y)
{
    x=_x;
    y=_y;
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::T_Point(TPoint p)
{
    x=p.x;
    y=p.y;
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::T_Point(const T_Point &p)
{
    x=p.x;
    y=p.y;
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::operator TPoint()
{
    return TPoint(x,y);
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >& T_Point< Type >::operator = (const T_Point &p)
{
    x=p.x;                             
    y=p.y;
    return *this;
}
//---------------------------------------------------------------------------
template <class Type>
bool T_Point< Type >::operator == (T_Point p)
{
    return (x==p.x && y==p.y);
}
//---------------------------------------------------------------------------
template <class Type>
bool T_Point< Type >::operator != (T_Point p)
{
    return !(*this==p);
}
//---------------------------------------------------------------------------
template <class Type>
void T_Point< Type >::Init(Type _x,Type _y)
{
    x=_x;
    y=_y;
}
//---------------------------------------------------------------------------
template <class Type>
T_Point< Type >::T_Point()
{
    x=y=0;
}
//---------------------------------------------------------------------------
template <class Type>
char* T_Point< Type >::toChar(int n)
{
    if(n<0)
    {
        return NULL;
    }
    char buf[32];
    sprintf(buf,"(%1.2f;%1.2f)",x,y);
    return strdup(buf);
}
//---------------------------------------------------------------------------
template <class Type>
void T_Point< Type >::Draw(TCanvas *Canvas,const TColor &cl)
{
    Canvas->Pixels[x][y]=cl;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2013, 18:38
Ответы с готовыми решениями:

Шаблон родительского класса и шаблон класса потомка
Запутался, как правильно пронаследоваться от шаблона класса? #include &lt;iostream&gt; #include...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают)...

Шаблон класса, параметром которого должны являться наследники определённого класса
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром...

Написать шаблон класса на основе класса vector для реализации стековой структуры данных
Пыталась написать код, но не уверена будет ли такая реализация корректной, можно ли это сделать...

3
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
15.01.2013, 18:45 2
Методы шаблонного класса должны быть видны в точке инстанцирования.
в *.cpp файле класс виден, но никем не используется, поэтому его методы не создаются.

наиболее простой способ побороть ошибку - оставить реализацию методов в заголовочном файле
0
1 / 1 / 1
Регистрация: 08.07.2012
Сообщений: 23
15.01.2013, 18:52  [ТС] 3
ArmanPrestige,
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
наиболее простой способ
а какии есть еще методы?

тогда получаеться, что файл cpp не нужен?
0
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
15.01.2013, 19:02 4
Цитата Сообщение от BREAK350 Посмотреть сообщение
ArmanPrestige,

а какии есть еще методы?

тогда получаеться, что файл cpp не нужен?
получается так. однако если вам известно с какими типами будет использоваться данный метод в шаблонном классе, то можно вынести эти специализации.

Добавлено через 3 минуты
вы должны помнить, что шаблон порождает код класса только тогда, когда вы употребляете этот шаблон в программе с конкретными параметрами. это означает, что нельзя скомпилировать модуль содержащий просто шаблон класса. шаблон это еще не тип (если говорить о С++). таким образом, реализация метода должна быть в том модуле, где этот метод используется, иначе получите Unresolved symbol
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2013, 19:02
Помогаю со студенческими работами здесь

Шаблон класса (параметризация класса)
Нужна помощь и советы!!! Англо-русский словарь построен как список. Каждая компонента содержит...

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. Честно говоря, я ничего...

шаблон класса
Спроектировать шаблон класса. В основной программе создать соответствующие структуры простых и...

Шаблон класса с++
StakNode.h #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include &lt;string&gt; template&lt;class T&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru