Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951

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

16.05.2012, 21:19. Показов 2456. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, пытаюсь сделать из своих классов шаблонный, но компилятор выдает ошибку.. кто может помочь?
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
 
template <class Type>
class TStek
{
private:
    Type * elem;
    int kol;
    int maxkol;
public:
 
    TStek(int n);
    TStek();//конструктор по умолчанию
    ~TStek();
    TStek(const TStek & c);//копирующий конструктор
    void dobav(int n);
    void udal();
    void vyvod(AnsiString & s);
    void summa(int & sum);
    TStek  operator ++();
} ;
 TStek <int> tr;
 
template <class Type>
TStek::TStek(Type max)[COLOR="Red"]//здесь выдает ошибку[/COLOR]
{
kol=0;
elem=new  int[max];
}
//копирующий конструктор()
template <class Type>
TStek::TStek(const TStek & stack)[COLOR="Red"]//здесь тоже[/COLOR]
{elem=stack.elem;
kol=stack.kol;
}
проект приложила=(
вообще в смятении
Вложения
Тип файла: rar Lab6.rar (109.4 Кб, 12 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2012, 21:19
Ответы с готовыми решениями:

Шаблонные функции
Задание: Напишите программу, которая использует шаблон функции для наибольшего из двух аргументов. Проверьте программу, используя пары...

шаблонные методы шаблона. Специализация.
Вопрос: каким образом можно вынести реализацию методов класса за его пределы? Изначально вопрос формулировался так: Каким образом можно...

Кассы
Доброе время суток. У меня есть еще вопрос к вам. В организации, в которой я работаю, есть магазин, в нем есть три кассы подключенные в...

16
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.05.2012, 22:47
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
template <class Type>
class TStek
{
private:
    Type * elem;
    int kol;
    int maxkol;
public:
 
    TStek(int max);
    TStek();
    ~TStek();
    TStek(const TStek & stack);
    void dobav(int n);
    void udal();
    void vyvod(AnsiString & s);
    void summa(int & sum);
    TStek  operator ++();
} ;
 TStek <int> tr;
 
template <class Type>
TStek::TStek(int max) {
    kol=0;
    elem=new  Type [max];
}
template <class Type>
TStek::TStek(const TStek & stack){
    elem=stack.elem;
    kol=stack.kol;
}
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2012, 19:21
C++
1
2
3
4
5
6
template <class Type>
TStek::TStek(int max) 
{
   kol=0;
   elem=new  Type [max];
}
Чет я не пойму из за чего:
[BCC32 Error] main.cpp(45): E2102 Cannot use template 'TStek<Type>' without specifying specialization parameters
Добавлено через 50 минут
Не ужели никто не сталкивался с такой ошибкой?

Добавлено через 18 часов 55 минут
Тема актуальна думаю по тому как проблема не решена...
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
18.05.2012, 01:03
C++
1
2
3
4
5
6
template <class Type>
TStek<Type>::TStek(int max) 
{
   kol=0;
   elem=new  Type [max];
}
0
18.05.2012, 08:53

Не по теме:

Вот, блин, точно! Знал ведь, что чего-то не хватает, и лень же было свои шаблоны глянуть...:D

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.05.2012, 15:48
А конечный код полностью можно?
А то у меня выдает теперь:
[ILINK32 Error] Error: Unresolved external 'TStek<int>::TStek<int>()' referenced from C:\USERS\FUJITSU\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG_BUILD\MAIN.OBJ
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
18.05.2012, 17:40  [ТС]
[C++ Error] Unit1.cpp(69): E2102 Cannot use template 'TStek<Type>' without specifying specialization parameters

все равно не работает=/
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.05.2012, 20:03
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
using namespace std;
 
template <class T>
class TStek
{
private:
    T * mem;
    int size;
    int maxsize;
public:
    TStek(int size);
    //TStek(); // Еще не реализован
    ~TStek();
    TStek(const TStek & stack);
    //void dobav(int n);
    //void udal();
    //void vyvod(AnsiString & s);
    //void summa(int & sum);
    //TStek  operator ++();
} ;
//--------------------------------------------
template <class T>
TStek<T>::TStek(int size)
{
 size=0;
 mem=new  T [size];
}
//--------------------------------------------
template <class T>
TStek<T>::TStek(const TStek & stack)
{// тут внес изменения
 mem= new T(stack.size);
 size=stack.size;
 for(int i=0;i<size;i++) mem[i]= stack.mem[i];// копирование
}
//--------------------------------------------
template <class T>
TStek<T>::~TStek() { delete[] mem; }
//--------------------------------------------
TStek<int> tr0(2);
//----------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
TStek<int> tr1(5);
TStek<int> tr2(tr1);
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Ошибка была в строке 20

C++
1
TStek <int> tr;// еще не реализован конструктор TStek();
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2012, 20:05
Вот так компилируется. Очевидно, линковщику позарез нужны определения конструктора и деструктора, к остальным не придирается.
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
template <class Type>
class TStek {
private:
    Type *elem;
    int kol;
    int maxkol;
public:
    TStek( int max );
    TStek( );
    ~TStek( );
    TStek( const TStek &stack );
    void dobav( int n );
    void udal( );
    void vyvod( AnsiString &s );
    void summa( int &sum );
    TStek operator ++( );
};
template <class Type>
TStek <Type> ::TStek( ) {
 
}
template <class Type>
TStek <Type> ::~TStek( ) {
 
}
template <class Type>
TStek <Type> ::TStek( int max ) {
    kol = 0;
    elem = new Type[max];
}
template <class Type>
TStek <Type> ::TStek( const TStek &stack ) {
    elem = stack.elem;
    kol = stack.kol;
}
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
18.05.2012, 22:05
Цитата Сообщение от BRcr Посмотреть сообщение
Вот так компилируется. Очевидно, линковщику позарез нужны определения конструктора и деструктора, к остальным не придирается.
А можно просто фигурные скобки добавить и тоже компилируется

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public:
    TStek( int max );
    TStek( ){};  <-----------
    ~TStek( ){};   <-----------
    TStek( const TStek &stack );
    void dobav( int n );
    void udal( );
    void vyvod( AnsiString &s );
    void summa( int &sum );
    TStek operator ++( );
};
//template <class Type>
//TStek <Type> ::TStek( ) {
//
//}
 
//template <class Type>
//TStek <Type> ::~TStek( ) {
//
//}
 
template <class Type>
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2012, 22:16
Цитата Сообщение от MrCold Посмотреть сообщение
А можно просто фигурные скобки добавить и тоже компилируется
Можно, конечно - это то же самое по сути.
Вероятно, если у метода, объявленного в классе, нет определения, компилятор его реализует как виртуальный, однако, с конструктором и деструктором так поступить по какой-то причине не может.
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
19.05.2012, 13:43  [ТС]
Сами функции вот эти:
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
void TStek<::dobav(int n)
{
if(kol<maxkol){elem[kol]=n; kol++;}
}
 
 
void TStek<Type>::udal()
{/*if(kol>0)
        kol--;*/
delete []elem  ;
Form1->memoStek->Lines->Clear();
}
 
 
void TStek<Type>::vyvod(AnsiString & s)
{
s="";
for(int i=kol-1; i>=0; i--)
s=s+AnsiString(elem[i])+"\r\n";
}
 
 
void TStek<Type>::summa(int & sum)
{
sum=0;
for(int i=0; i<kol; i++)
sum+=elem[i];
}
не могу сделать шаблонными=/
пишу так:
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
template <class Type>
void TStek<Type>::dobav(int n)
{
if(kol<maxkol){elem[kol]=n; kol++;}
}
 
template <class Type>
void TStek<Type>::udal()
{/*if(kol>0)
        kol--;*/
delete []elem  ;
Form1->memoStek->Lines->Clear();
}
 
template <class Type>
void TStek<Type>::vyvod(AnsiString & s)
{
s="";
for(int i=kol-1; i>=0; i--)
s=s+AnsiString(elem[i])+"\r\n";
}
 
template <class Type>
void TStek<Type>::summa(int & sum)
{
sum=0;
for(int i=0; i<kol; i++)
sum+=elem[i];
}
Добавлено через 23 секунды
не выходит..что-то недопонимаю я...

Добавлено через 7 минут
Ребят, спасибо вам! С функциями получилось, теперь неясно-выдает ошибку здесь:
C++
1
TStek *stek;
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.05.2012, 14:39
Цитата Сообщение от Electroflower Посмотреть сообщение
теперь неясно-выдает ошибку здесь:
Текст ошибки и соответствующий ей код в студию!:cofee:
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.05.2012, 15:54
C++
1
TStek *stek;
А тип указать?
C++
1
TStek<int> *stek;
0
 Аватар для Whatson
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
24.04.2013, 09:57
Подскажите, пожалуйста! Странно, если инициализировать методы (template) в самом .h-нике, то всё ok. А если перенести "инициализацию" в какой-то .cpp, то не работает. И выдаёт как у Avazart-a
"[ILINK32 Error] Error: Unresolved external 'TSens<bool>::LoadCal(char *)' referenced from ... .OBJ
[ILINK32 Error] Error: Unable to perform link"
Вот сам .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
#ifndef Class_SensH
#define Class_SensH
 
template <class Bool_type>
class TSens
    {
    private:
    Bool_type qwe;
    public:
    Bool_type LoadCal(char MyLoadFName[]);
    //TSens();
    //~TSens();
    //Dim_cal get_Cal;
    //float get_U;
    //PresisSolve Solve();
    //Dim_sol get_SolutionVariety;
    };
 
//Bool_type TSens <Bool_type> :: LoadCal(char MyLoadFName[])
//{                                                                //it's work!
//return true;
//}
#endif
вот .cpp:
C++
1
2
3
4
5
6
7
#include "Class_Sens.h"
 
template <class Bool_type>
Bool_type TSens <Bool_type> :: LoadCal(char MyLoadFName[])
{
return true;
}
Может надо чего-то приписать в .h-нике?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.04.2013, 10:08
Ну да, вот это:
C++
1
2
3
4
5
template <class Bool_type>
Bool_type TSens <Bool_type> :: LoadCal(char MyLoadFName[])
{
return true;
}
- надо прописать именно "в .h-нике". То же касается всех остальных методов класса.
Потому что определения шаблонных методов класса должны быть в одном файле с объявлением класса - и баста.
1
 Аватар для Whatson
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
24.04.2013, 10:10
Круто и оперативно, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2013, 10:10
Помогаю со студенческими работами здесь

БД Ж/Д кассы
Нашел у вас на форуме БД Ж/Д касса. Мне эта БД нужна на курсак, но на Украинском языке. Возможно её перевести на Украинский?

БД работа кассы
Может есть готовая база данных, где через форму --пробивается чек(вводится артикул товара и он его находит) --вводится сумма внесения...

Интеграция онлайн кассы
Добрый день! Очень прошу помощи. Есть очень простая Прогоамма для учета продаж. Даже не используются БД. Каждый чек сохраняется как...

Онлайн-кассы и синхронизация с 1С
Всем доброго времени суток. В связи с принятым законом (ч. 1 ст. 7 Закона от 03.07.2016 N 290-ФЗ) необходимо перейти на онлайн-кассы...

Модель кассы вокзала
В кассе вокзала через каждые 10+-3 мин появляются клиенты. На обслуживание клиентиа у кассира уходит от 5 до 15 мин. (распределение времени...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru