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

Создание шаблонного класса(очередь)

09.04.2017, 11:26. Показов 493. Ответов 4
Метки нет (Все метки)

Создал приоритетную очередь:
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
#include <iostream>
 
template<typename T>
class Element
{
public:
    Element(double key, double findKey, T data);
 
    double getKey();
    double getFindKey();
    T getData();
 
private:
    T data;
    double key;
    double findKey;
};
 
//template<typename T, typename std::enable_if<std::is_base_of<Comparable, T>::value>::type>
template<typename T>
class PriorityQueue
{
public:
    static const int MAX_SIZE = 200;
 
    PriorityQueue();
    PriorityQueue(int maxSize);
 
    int getSize() const;
    bool isEmpty();
    bool insert(T element, double key, double findKey);
    void trickleUp(int index);
    T remove();
    T head();
    void trickleDown(int index);
    bool change(int index, T element, double newKey, double newFindKey);
    void print();
    T find(int key, int& pos);
 
private:
    Element<T> array[MAX_SIZE]; // пирамида
    int size;                                   // текущий размер очереди
    int maxSize;                            // максимальный размер очереди
};
Вот ее конструктор:
C++
1
2
3
4
5
6
template<typename T>
PriorityQueue<T>::PriorityQueue()
{
    size = 0;
    maxSize = MAX_SIZE;
}
При попытке ее использовать в классе Graph:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <graphedge.h>
#include <priorityqueue.h>
 
class Graph
{
public:
... 
 
    Graph();
 
   ...
 
private:
   
...
 
    PriorityQueue<GraphEdge> pq = PriorityQueue<GraphEdge>();       // приоритетная очередь ребер
 
...
 
};
Вылетает ошибка в конструкторе Graph:
ошибка: undefined reference to `PriorityQueue<GraphEdge>::PriorityQueue()'

Подскажите, пожалуйста, в чем проблема?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 11:26
Ответы с готовыми решениями:

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

Создание Шаблонного класса
Здравствуйте! Столкнулся с проблемой создания шаблона для класса. Не могу понять как ввести более...

Создание шаблонного класса matrix
main.cpp #include &lt;iostream&gt; #include &quot;CMatrix.h&quot; int main() { int n = 3; int m = 2;

4
Don't worry, be happy
17205 / 10083 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
09.04.2017, 11:29 2
Не собирается проект с шаблонным классом: "undefined reference"
1
1 / 1 / 1
Регистрация: 08.04.2012
Сообщений: 53
09.04.2017, 17:02  [ТС] 3
А все-таки без явного инстанцирования есть способ заменить явовский
Java
1
<? extends T>
?
0
Don't worry, be happy
17205 / 10083 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
09.04.2017, 17:55 4
Sanek_MX, перенесите реализацию в заголовочный файл.
0
281 / 229 / 114
Регистрация: 07.09.2016
Сообщений: 584
09.04.2017, 19:02 5
на счет <? extends T> можно поиграть со SFINAE вроде вашего же
//template<typename T, typename std::enable_if<std::is_base_of<Comparable, T>::value>::type>
и получить чертикакую ошибку компиляции, а можно статик ассерт засунуть в класс и получить
те же свойства класса, только с более понятными ошибками в случае нарушений условий.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2017, 19:02

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

Вызов метода у шаблонного поля, шаблонного класса
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Чем отличается шаблонный метод класса от шаблонного класса?
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок...

Объявление шаблонного класса
Как объявить шаблонный класс?

Наследование шаблонного класса
Всем привет! Не получается сделать наследование шаблонного класса, почему понять не могу??? ...


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

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

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