Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
#1

Шаблон класса - C++

15.01.2013, 18:38. Просмотров 275. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2013, 18:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон класса (C++):

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

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

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

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

Шаблон класса. - C++
Приведите пожалуйста пример какого нибудь простого класса с меню. Чтобы пользователь сам вводил, а не компьютер заполнял.

Шаблон класса - C++
Здравствуйте. Допустим есть шаблон класса: template &lt;typename T&gt; class M { M&lt;T&gt; operator* (const M &amp;m); //M operator*...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 849
Завершенные тесты: 1
15.01.2013, 18:45 #2
Методы шаблонного класса должны быть видны в точке инстанцирования.
в *.cpp файле класс виден, но никем не используется, поэтому его методы не создаются.

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

тогда получаеться, что файл cpp не нужен?
0
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 849
Завершенные тесты: 1
15.01.2013, 19:02 #4
Цитата Сообщение от BREAK350 Посмотреть сообщение
ArmanPrestige,

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

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

Добавлено через 3 минуты
вы должны помнить, что шаблон порождает код класса только тогда, когда вы употребляете этот шаблон в программе с конкретными параметрами. это означает, что нельзя скомпилировать модуль содержащий просто шаблон класса. шаблон это еще не тип (если говорить о С++). таким образом, реализация метода должна быть в том модуле, где этот метод используется, иначе получите Unresolved symbol
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 19:02
Привет! Вот еще темы с ответами:

Шаблон класса - C++
Привет товарищи. Тут в общем такая история, запилил шаблонный класс реализующий очередь , который работает на чарах, а вот на целочисленных...

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

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

Шаблон класса - C++
Есть класс телефонный номер - #ifndef NUMBERR_H #define NUMBERR_H class numberr { int phone; public: int phone3; int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.01.2013, 19:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru