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

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

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

Дек-шаблон - C++

22.05.2014, 01:34. Просмотров 1199. Ответов 7
Метки нет (Все метки)

Доброй ночи.
У меня вопрос.
Я хочу реализовать дек, а потом на его основе сделать шаблон. В деке могут храниться как числа, так и строки. Я попытался реализовать через промежуточный класс. На этапе компиляции выводит ошибку LNK2019.
Где именно ошибка, я не знаю.
Очень хочу услышать дельные советы по реализации дека-шаблона.

Объявление классов
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
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>
 
#ifndef my_classes
#define my_classes
 
using namespace std;
 
class CInteger
{
public:
    int value;
    CInteger () {value=0;};
    CInteger (int param) { value = param; };
    void Out () {cout << value << endl;}
};
class CString
{
public:
    char *value;
    CString (char *param) {value=new char [strlen(param)+1]; value[0]='\0'; strcpy(value, param);};
    ~CString () {delete[] value;};
    void Out () {cout << value << endl;}
};
 
template <class type>
class CElement
{
public:
    type value;
    type *next;
    type *prev;
    CElement<type> (char *param, type *previous, type *next);
    ~CElement<type> (); 
};
 
template <class deque>
class CDeque
{
private:
    CElement<deque> *first;
    CElement<deque> *last;
public:
    CDeque<deque> (char *param);
    ~CDeque<deque> ();
    void PushBack (char *param);
    void PushFront (char *param);
    void Delete (char *param);
    void Out ();
    char* StringOut ();
};
 
template <class type>
class CDeque_Sort: public CDeque <type>
{
public:
    void MergeSort ();
}
 
#endif my_classes

Описание методов
[СPP]#include "stdafx.h"
#include "my_classes.h"
#include <string.h>

;
template <class type> CElement<type>::CElement (char *param, type *previous, type *next)
{
if (typename == CString)
this->value = CString (param);
if (typename == CInteger)
this->value = CInteger (atoi(param));
this->prev = previous;
this->next = next;
};
template <class type> CElement<type>::~CElement ()
{
delete[] this->prev;
delete[] this->next;
this->value.~type();
};

template <class deque> CDeque<deque>::CDeque (char *param)
{
int counter, co_sp=0, j = 0;
char value [300];
type = deque;
CElement<type> *iterator;
CElement<type> *neu;

this->first = this->last = NULL;

for (counter=0; counter<strlen(param))
if (param[counter]==' ')
co_sp++;
if (param[strlen(param)]!=' ')
co_sp++;

for (counter=0; counter<strlen(param))
{
if (param[counter]==' ')
{
if (this->first = NULL)
{
iterator = new CElement<type> (value, NULL, NULL);
this->first = iterator;
neu = first;
}
else
{
neu = NULL;
neu = new CElement<type> (value, NULL, NULL)
neu->prev = iterator;
iterator->next = neu;
iterator = neu;
}
j = 0;
}
else
{
value[j] = param[counter];
j++;
value[j] = '\0';
}
}
this->last = iterator;
};
template <class deque> void CDeque<deque>::Out ()
{
type = deque;
CElement<type> *iterator = this->first;
while (iterator->next != NULL)
{
iterator->value.Out();
iterator = iterator->next;
}
};
[/CPP]

Основная программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Лабораторная работа 8.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "my_classes.h"
 
 
;int _tmain(int argc, _TCHAR* argv[])
{
    char *temp = new char [300];
    cin.getline(temp, 300);
    CDeque<CString> A (temp);
    A.Out();
    
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 01:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дек-шаблон (C++):

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

дек - C++
как сделать такую вещь? реализовать и протестировать контейнерный класс динамической структуры данных такой как дек. класс должен иметь...

Полный дек - C++
Добрый день! мучаюсь с задачей - реализовать тип и функции (инициализация,добавление\извлечение элементов с обеих сторон,проверка на...

Дек символов - C++
Доброго времени суток всем. У меня такая проблема: есть задача - Реализовать класс &quot;Дек символов&quot; (на базе списка). Реализовать...

Шаблонный дек - C++
Задача реализовать шаблонный класс дека, и класс Итератора для навигации по деку. До добавления шаблонов все хорошо работало. Ныне такие...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.05.2014, 02:03 #2
Цитата Сообщение от krautcat Посмотреть сообщение
На этапе компиляции выводит ошибку LNK2019.
Где именно ошибка, я не знаю.
текст ошибки сюда выложить, корона упадет?
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 02:08  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
текст ошибки сюда выложить, корона упадет?
Прошу прощения.

C++
1
2
3
Error   1   error LNK2019: unresolved external symbol "public: __thiscall CDeque<class CString>::~CDeque<class CString>(void)" (??1?$CDeque@VCString@@@@QAE@XZ) referenced in function _wmain
Error   2   error LNK2019: unresolved external symbol "public: void __thiscall CDeque<class CString>::Out(void)" (?Out@?$CDeque@VCString@@@@QAEXXZ) referenced in function _wmain
Error   3   error LNK2019: unresolved external symbol "public: __thiscall CDeque<class CString>::CDeque<class CString>(char *)" (??0?$CDeque@VCString@@@@QAE@PAD@Z) referenced in function _wmain
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.05.2014, 02:24 #4
а где описание ~CDeque ?
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 02:32  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
а где описание ~CDeque ?
Я его пока не сделал, of course.
Сейчас пытался сделать без промежуточного класса. Пока тоже безуспешно.
Отпишусь после написания деструктора.

Аналогичная ошибка. Деструткор описан.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
22.05.2014, 03:08 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
krautcat, у тебя ошибка в логике. Где, подсказывать не буду, т.к. оно и так очень заметно.
Если хочешь оптимизировать немного по скорости делай на массивах, скажем по 10 элементов.

Задания на стеки/очереди (без шаблонных классов stack, queue) тут моя недавняя реализация стека на массивах (в этом случае массив каждый раз перевыделяется, а тебе надо доделать что-бы он состоял из множества частей).

Если сделаешь на массивах получишь усложнение логики для их поддержки, но увеличится производительность на частых операциях добавления, удаления элементов, так как память под него выделять не надо будет (она уже будет выделена). Частые операции выделения памяти сильно тормозят. Да и те же move constructable & move assigneable интерфейсы поддерживать проще будет.
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 03:17  [ТС] #7
Цитата Сообщение от outoftime Посмотреть сообщение
Если хочешь оптимизировать немного по скорости делай на массивах, скажем по 10 элементов.
По заданию - дек. Вот и моделирую.

Буду копать в сторону логики тогда.

Добавлено через 1 минуту
Цитата Сообщение от outoftime Посмотреть сообщение
Где, подсказывать не буду, т.к. оно и так очень заметно.
Хотя бы направление, куда копать... На самом деле, я в шаблонах не шарю практически.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
22.05.2014, 11:53 #8
Цитата Сообщение от krautcat Посмотреть сообщение
На самом деле, я в шаблонах не шарю практически.
Цитата Сообщение от krautcat Посмотреть сообщение
Буду копать в сторону логики тогда.
В сторону логики а не семантики.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 11:53
Привет! Вот еще темы с ответами:

Простой дек - C++
Всем доброго вечера Столкнулся со следующей проблемой. Есть задание на простой дек: Реализуйте структуру данных &quot;дек&quot;. Напишите...

Простой дек - C++
Помогите решить задачу : Реализуйте структуру данных &quot;дек&quot;. Напишите программу, содержащую описание дека и моделирующую работу дека,...

Дек,заполение с конца - C++
Помогите плз написать функцию для заполнения дека с конца с клавиатуры и если можно с файла,если у нас есть: struct shop { int...

Вектор, дек, список - C++
Здравствуйте. Помогите пожалуйста разобраться в ошибках, которые возникают при компиляции. Вот они 145 C:\Documents and...


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

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

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