Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56

Шаблоны класса, очередь

23.06.2017, 12:57. Показов 3129. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание: Определите шаблон QueueTp. Проверьте его, создав очередь указателей на Worker. Вот что есть:
worker.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef WORKER_H_
#define WORKER_H_
#include <string>
class Worker
{
private:
    std::string fullname;
    int id;
public:
    void setData();
    void showData() const;
    Worker() : fullname("No Name"), id(0) {}
    Worker(const char * s, int num) : fullname(s), id(num) {}
 
};
#endif
worker.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "worker.h"
#include <iostream>
 
void Worker::setData()
{
    std::cout << "Enter firs name and last name: ";
    getline(std::cin, fullname);
    std::cout << "Enter person's ID: ";
    std::cin >> id;
    while(std::cin.get() != '\n')
        continue;
}
 
void Worker::showData() const     { std::cout << fullname << ", № " << id << std::endl;     }
queueTP.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
#ifndef QUEUETP_H_
#define QUEUETP_H_
 
template <class T>
 
class QueueTP
{
private:
    enum {Q_SIZE = 10};
    struct Node {   T t_item; struct Node * next;   };  // Отдельный узел
    Node * front;                   // указатель на начало очереди
    Node * rear;                    // указатель на конец очереди
    int items;                      // текущее количество элементов в очереди
    const int qsize;                // максимальное количество элементов в очереди
    
    QueueTP(const QueueTP & q) :qsize(0) {}             
    QueueTP & operator=(const QueueTP & q) {    return *this;   }   
 
public:
    QueueTP(int qs = Q_SIZE);
    ~QueueTP();
    bool isempty() const;
    bool isfull() const;
    int queuecount() const;
    bool enqueue(const T & t);
    bool dequeue(T & t);
};
 
#endif
Впоследствии T хочу сделать указателем на Worker (как требуется в задании).
queueTP.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
#include "queueTP.h"
 
template <class T>
QueueTP<T>::QueueTP(int qs) :qsize(qs)
{
    front = rear = NULL;
    items = 0;
}
 
template <class T>
QueueTP<T>::~QueueTP()
{
    Node * temp;
    while(front != NULL)
    {
        temp = front;
        front = front->next;
        delete temp;
    }
}
 
template <class T>
bool QueueTP<T>::isempty() const    {   return items == 0;  }
 
template <class T>
bool QueueTP<T>::isfull() const {   return items == qsize;  }
 
template <class T>
int QueueTP<T>::queuecount() const  {   return items;   }
 
template <class T>
bool QueueTP<T>::enqueue(const T &item)
{
    if(isfull())    return false;
 
    Node * add = new Node;
    if (add = NULL)     return false;
    add->t_item = item;
    add->next = NULL;
    items++;
    if(front == NULL)   
        front = add;
    else 
        rear->next = add;
    rear = add;
    return true;
}
 
template <class T>
bool QueueTP<T>::dequeue(T &t)
{
    if(front == NULL)
        return false;
    t = front->t_item;
    items--;
    Node * temp = front;
    front = front->next;
 
    delete temp;
    if(items == 0)
        rear = NULL;
    return true;
}
Добавлено через 34 минуты
Help: Почему вылезает ошибка компоновщика:
useAll.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "worker.h"
#include "queueTP.h"
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    int maxSize;
    cout << "Enter max size of queue of workers: ";
    cin >> maxSize;
    QueueTP<Worker * > work(maxSize);
 
    return 0;
}
error LNK2019: unresolved external symbol
fatal error LNK1120: 2 unresolved externals
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2017, 12:57
Ответы с готовыми решениями:

Шаблоны. Реализовать шаблонный класс очередь
Реализовать шаблонный класс очередь. Реализовать все основные операции: положить, взять, удалить элемент. Обеспечить функционирование...

Шаблоны класса
Здравствуйте! Не могли бы вы помочь сделать 10й пункт меню, там должен выполняться шаблон(198-216 строка) из заголовочного файла set.h. В...

Шаблоны методов класса
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно что-то типа подобного: class MyClass ...

15
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.06.2017, 13:23
Текст ошибки полностью показывай. Что именно unresolved и в какой строке?
0
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 13:32  [ТС]
useAll.obj : error LNK2019: unresolved external symbol "public: __thiscall QueueTP<int>::~QueueTP<int>(void)" (??1?$QueueTP@H@@QAE@XZ) referenced in function _main
1>useAll.obj : error LNK2019: unresolved external symbol "public: __thiscall QueueTP<int>::QueueTP<int>(int)" (??0?$QueueTP@H@@QAE@H@Z) referenced in function _main
1>G:\WORK\C++\PROJECTS\S Prata\chapter14\ex\ex3\Debug\ex3.exe : fatal error LNK1120: 2 unresolved externals
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.06.2017, 14:52
А если весь queueTP перенести в useAll.cpp, работает?
1
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 16:15  [ТС]
Хм.. работает.. А почему?..
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.06.2017, 16:56
Цитата Сообщение от mariellla Посмотреть сообщение
Хм.. работает.. А почему?..
и откуда вы только такие беретесь... >_<
0
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 17:51  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
и откуда вы только такие беретесь... >_<
Вообще ни о чем комментарий.. сказать нечего?

Я задаю вопрос, если кто-то может помочь, объяснить, благодарю. Спасибо, что помогают разбираться новичкам. Я же не прошу написать за меня.

Или Вам, hoggy, лишь бы что-то написать?

Добавлено через 44 минуты
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
int main()
{
    int maxSize = 1;
    cout << "Enter max size of queue of workers (less 10): ";
    cin >> maxSize;
 
    Worker ** w = new Worker*[maxSize];
    QueueTP<Worker * > work(maxSize);
    for(int i = 0; i < maxSize; i++)
    {
        char choice;
        cout << "Do you want to add a worker? Y(y) / N(n): ";
        cin >> choice;
        while(strchr("ynYN", choice) == NULL)
        {
            cout << "Enter Y(y) or N(n): ";
            cin >> choice;
        }
        if (choice == 'n' || choice == 'N')
            break;
        cin.get();
        w[i] = new Worker();
        w[i] -> setData();
        work.enqueue(w[i]);
    }
 
    return 0;
}
При добавлении w[i] в очередь получаю ошибку: "Прекращена работа программы". Подскажите, пожалуйста, что исправить?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
23.06.2017, 17:54
Цитата Сообщение от mariellla Посмотреть сообщение
Или Вам hoggy лишь бы что-то написать?
mariellla, вы уже третья(или третий?) за сегодня, кто пишет реализацию шаблонов в cpp, и потом обращается на этот форум
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
23.06.2017, 17:54
Цитата Сообщение от mariellla Посмотреть сообщение
if (add = NULL) return false;
if (add == NULL)
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.06.2017, 17:59
Цитата Сообщение от gray_fox Посмотреть сообщение
if (add == NULL)
C++
1
if (add == nullptr)
C++
1
if (!add)
1
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 18:01  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
if (add = NULL) return false;
if (add == NULL)
Merci, а ведь так и не заметна ошибка.. Лучше, наверное, так: if (NULL == add)

Цитата Сообщение от TRam_ Посмотреть сообщение
mariellla, вы уже третья(или третий?) за сегодня, кто пишет реализацию шаблонов в cpp, и потом обращается на этот форум
А к кому же ещё обращаться, если не к спецам?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
23.06.2017, 18:01
Цитата Сообщение от mariellla Посмотреть сообщение
Merci, а ведь так и не заметна ошибка.. Лучше, наверное, так: if (NULL == add)
Лучше if (!add)
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.06.2017, 18:04
Цитата Сообщение от mariellla Посмотреть сообщение
А к кому же ещё обращаться, если не к спецам?
Любите книгу — источник знания, только знание спасительно, только оно может сделать вас духовно сильными, честными, разумными людьми, которые способны искренне любить человека, уважать его труд и сердечно любоваться плодами его непрерывного великого труда.(с)
Классика

Добавлено через 58 секунд
Но вы не думайте плохо, каждый второй на эти грабли наступает.
0
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 18:24  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
Лучше if (!add)
Да, соглашусь, лучше, и понятнее.
А такую запись if (add == NULL) подсмотрела в книге. Непонятно почему автор решил использовать именно её.

Цитата Сообщение от MrGluck Посмотреть сообщение
Любите книгу — источник знания, только знание спасительно, только оно может сделать вас духовно сильными, честными, разумными людьми, которые способны искренне любить человека, уважать его труд и сердечно любоваться плодами его непрерывного великого труда.(с)
М. Горький
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
23.06.2017, 18:34
Цитата Сообщение от mariellla Посмотреть сообщение
Непонятно почему автор решил использовать именно её.
для случая, если кто-нибудь захочет переопределить оператор сравнения для указателя на данный класс. Иных причин не вижу.
0
0 / 0 / 1
Регистрация: 05.09.2016
Сообщений: 56
23.06.2017, 18:45  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
для случая, если кто-нибудь захочет переопределить оператор сравнения для указателя на данный класс. Иных причин не вижу.
Если это и так, то автор книги умолчал об этом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.06.2017, 18:45
Помогаю со студенческими работами здесь

Не разбиваются шаблоны класса на файлы
Всем привет. Изучаю С++, всегда разбивал свои программы на файлы и радовался, но тут начал изучать шаблоны классов, и ничего не выходит,...

Шаблоны массива класса array (объяснить)
Здравствуйте, я не могу понять, что означает шаблон класса array..Вот само задание: &quot;13. Объявите следующие объекты данных ...

Шаблоны классов, перегрузка operator<< класса ostream
Не компилируется программа. fatal error: 1 unresolved externals Как правильно определить operator&lt;&lt; ??? #include...

Шаблоны. Класс "Очередь"
Как исправить ошибку? #include &lt;iostream&gt; using namespace std; template&lt;class T&gt; class Ochered { private: T Massive; ...

Шаблон класса очередь
Привет всем. При создании шаблона класса столкнулся со следующими проблемами: при использовании перегруженной &lt;&lt; пишет запрещенный...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru