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

Очередь на основе массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ VSTO 2007 http://www.cyberforum.ru/cpp-beginners/thread228725.html
Добрый день!Подскажите где можно найти литературу по Visual Studio Tools for Office 2007 на русском языке. Для написания add-in под MS Project 2007. писать буду на Visual C# или Vicual C++.
C++ Сокращение расстояния Хэмминга Добрый день, уважаемые форумчане. Есть у меня следующая ситуация: имеем два массива одинаковой длины типа unsigned int, например arr1 и arr2 (на самом деле размерность может быть любой). Необходимо сократить расстояние Хэмминга между этими двумя наборами чисел, т.е., имеем, например, следующие числа arr1 656546345 15632489 arr2 606214697 78559272 которые в двоичном коде выглядят как arr1... http://www.cyberforum.ru/cpp-beginners/thread228708.html
Слова-анаграммы C++
Для заданного с клавиатуры слова построить все его анаграммы, т.е. слова (возможно бессмысленные), состоящие из всех букв исходного слова, но расположенных в произвольном порядке. Хотя бы намекните, как реализовать
C++ Реализация стека
вот такие ошибки при реализации: stack.h(26) : error C2953: 'Stack' : class template has already been defined liststack.h(10) : error C2955: 'Stack' : use of class template requires template argument list boundstack.h(6) : error C2955: 'Stack' : use of class template requires template argument list вот сами классы: BoundStack.h #include "Stack.h" #include <iostream>
C++ Реализовать игру человека и машины по заполнению “Греко-латинского квадрата” http://www.cyberforum.ru/cpp-beginners/thread228309.html
Помогите решить программу на C++. “Греко-латинским квадратом” порядка N называют матрицу (N, N), в каждом столбце, каждой строке и обеих диагоналях которого содержатся все целые числа от1 до N . Реализовать игру человека и машины по заполнению “Греко-латинского квадрата”. Проигрывает тот, кто первым не сумеет сделать допустимый ход.
C++ Нажно написать программу на языке програм С "моделирование движения" Нужно написать программу моделирующую движение спутника вокруг планеты. Грубо говоря написать программу в которой будет один объект вращаться вокруг второго. Писать можно любыми способами но: программа должно быть написана на языке С а не С++ спутник не вращается вокруг своей оси,планета не вращается вокруг своей оси, спутник вращается только вокруг планеты, вращение происходит в 1 плоскости... подробнее

Показать сообщение отдельно
blackbanny
129 / 116 / 2
Регистрация: 14.11.2010
Сообщений: 707
14.01.2011, 14:42     Очередь на основе массива
когда создаю пустую очередь размерностью 2 в main() вот так BoundQueue <int> a(2);
выводится ошибка:
C++
1
main.cpp(13) : error C2259: 'BoundQueue<T>' : cannot instantiate abstract class
пишу в Visual Studio 2008

подскажите в чем дело...

вот код классов:
Queue.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
#include <iostream>
using namespace std;
#pragma once
template <class T>
class Queue
{
public:
    //Виртуальный деструктор для переопределения в реализациях
    virtual ~Queue() {}
 
    //Операции с абстрактной очередью:
 
    //Добавление элемента в очередь. Может возникнуть ситуация 
    //QueueOverflow, если в очереди нет места для записи нового элемента.
    virtual void enqueue(const T & e) = 0;
 
    //Удаление элемента из головы очереди. Если ни одного элемента
    //в очереди нет, может возникнуть ситуация QueueUnderflow
    virtual void dequeue() = 0;
 
    //Проверка того, что очередь пуста(не имеет ни одного элемента)
    virtual bool empty() const = 0;
 
    //Четыре функции доступа для чтения/записи 
    //элемента в голове и хвосте очереди
    virtual T & head() = 0;
    virtual const T & head() const = 0;
    virtual T & tail() = 0;
    virtual const T & tail() const = 0;
};
BoundQueue.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
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "Queue.h"
#include <iostream>
#pragma once
using namespace std;
template <class T> 
class BoundQueue: public Queue<T> 
{
    T *array; //массив элементов очереди
    int MaxSize; //количество элементов в массиве
    int pHead; //индекс первого элемента
    int pTail; //индекс последнего элемента
    int nCount; //количество элементов очереди
 
public:
 
    //Конструктор ограниченной очереди BoundQueue
    BoundQueue(int size);
 
    //Конструктор копирования BoundQueue
    BoundQueue(const BoundQueue<T> & src);
 
    //Деструктор освобождает память, занятую элементами очереди.
    virtual ~BoundQueue() {count = 0; delete[] array;}
 
    //Реализация абстрактных операций над очередью:
 
    //Включение нового элемента в конец очереди
    void enqueue(const T & item);
    //Удаление элемента из головы очереди
    void dequeue();
    //Проверка очереди на пустоту
    bool empty() {return nCount;}
    //Доступ к головному элементу очереди
    T & head();
    const T & head() const;
    //Доступ к хвостовому элементу очереди
    T & tail();
    const T & tail() const;
};
 
//Конструктор нового пустого стека
template <class T> BoundQueue<T>::BoundQueue(int size)
{
    try
    {
        array = new T[MaxSize = size];
    }
    catch(...)
    {
        throw WrongQueueSize("Incorrect size!");
    }
    count = 0;
}
 
//Конструктор копирования 
template <class T> BoundQueue<T>::BoundQueue(const BoundQueue<T> &src)
{
    //Прежде всего выделяется новая память под элементы нового массива
    try
    {
        array = new T[MaxSize = src.MaxSize];
    }
    catch(...) 
    {
        throw WrongStackSize("Incorrect size!");
    }
    //Теперь производится копирование элементов 
    count = src.count;
    for(int i = 0; i < count; i++) array[i] = src.array[i];
}
 
template <class T> void BoundQueue<T>::enqueue(const T &item)
{
    //Проверка, есть ли в массиве место для нового элемента 
    if(nCount == MaxSize) throw QueueOverflow();
    //Помещение элемента в массив
    if(++pTail == MaxSize) pTail = 0;
    array[pTail] = item;
    nCount++;
}
 
template <class T> void BoundQueue<T>::dequeue()
{
    //Проверка, есть ли в очереди хоть один элемент
    if(nCount == 0) throw QueueUnderflow();
    if(++pHead == MaxSize) pHead = 0;
    //Уменьшение счетчика числа элементов
    nCount--;
}
 
template <class T> T & BoundQueue<T>::head()
{
    //Проверка, есть ли в очереди хоть один элемент
    if(nCount == 0) throw QueueUnderflow();
    //Результат - ссылка на головной элемент
    return array[pHead];
}
 
template <class T> const T & BoundQueue<T>::head() const
{
    //Проверка, есть ли в очереди хоть один элемент
    if(nCount == 0) throw QueueUnderflow();
    //Результат - ссылка на головной элемент
    return array[pHead];
}
 
template <class T> T & BoundQueue<T>::tail()
{
    //Проверка, есть ли в очереди хоть один элемент
    if(nCount == 0) throw QueueUnderflow();
    //Результат - ссылка на хвостовой элемент
    return array[pTail];
}
 
template <class T> const T & BoundQueue<T>::tail() const
{
    //Проверка, есть ли в очереди хоть один элемент
    if(nCount == 0) throw QueueUnderflow();
    //Результат - ссылка на хвостовой элемент
    return array[pTail];
}
Добавлено через 1 час 24 минуты
нашел ошибку надо было не virtual bool empty() const = 0;
а virtual bool empty() = 0;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru