Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
5Hur1K
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 5
#1

Не могу разобраться с ошибками, наследование и шаблоны

03.11.2012, 04:58. Просмотров 417. Ответов 1
Метки нет (Все метки)

Задание:
Смоделировать стек на базе статического массива по заданию. Написать основные операции для работы со стеком (push, pop, top, empty, full) . Для этого (если в задании не указан иной способ) в программе на входе задать последовательность из К (К> 10) целых чисел (числа вводить с клавиатуры). Все положительные числа последовательно заносить в стек, а каждое отрицательное число должно изымать из стека один элемент. Отобразить динамику содержания стека при обработке заданной последовательности. Входную последовательность чисел задать такой, чтобы она демонстрировала работу основных операций и генерировала возникновения ситуаций "потери значимости стека" (stack underflow) и "переполнение стека" (stack overflow).
Примечание: после реализации стека работать с ним как с абстрактным типом данных, а не как с массивом.

Написать программу для последовательного хранения двух стеков в массиве из N элементов (стеки размещаются друг за другом: первая половина массива - первый стек, вторая половина массива - второй стек). На входе задаются пары целых чисел (i, j), 1  i  2. Число j пары (i, j) с j> 0 добавляется в i-й стек; число j пары (i, j), с j <= 0, не используется, но и-го стека изымается один элемент. После обработки всей заданной входной последовательности определить наибольший элемент каждого стека.

Код программы:
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <iostream>
#include <locale>
#include <windows.h>
#include <cassert>
using namespace std;
 
template <class T>
class MyStack
{
protected:
    T *massive;
    int size_row;
 
public:
    MyStack():size_row(0){};
    MyStack(int row){
        size_row=row;
        massive=new T [size_row];
    };
    ~MyStack(){delete [] massive;};
    
    virtual bool full();
    virtual void push(T obj=0);
    virtual bool empty();
    virtual void viewStack();
    virtual T top();
    virtual void pop();
    virtual T maxValue();
};
//-------------------------------------------------------------------
template <class T>
class Stack1: public MyStack <T>
{
protected:
    int index1;
 
public:
    Stack1(){
        index1=0;
    };
    ~Stack1();
 
    virtual bool full(){
        if(index1==(this->size_row/2)) return true;
        else return false;
    }
    virtual void push(T obj){
        if(full()){
            cout<<"\nstack1 overflow";
            index1--;
        }
        else this->massive[index1++]=obj;
    }
    virtual bool empty(){
        if(index1==0) return true;
        else return false;
    }
    virtual void viewStack(){
        for(int k=0;k<index1;k++){
            cout<<"Stack2: "<<this->massive[k]<<" ";
        }
        cout<<endl;
    }
    virtual T top(){
        return this->massive[index1-1];
    }
    virtual void pop(){
        if(empty()) cout<<"stack1 underflow";
        else --index1;
    }
    virtual T maxValue(){
        T tmp;
        tmp=this->massive[index1];
        for(int k=index1-1;k>=0;k--){
            if(this->massive[k]>tmp) tmp=this->massive[k];
        }
        return tmp;
    }
};
//-------------------------------------------------------------------
template <class T>
class Stack2: public MyStack <T>
{
protected:
    int index2;
 
public:
    Stack2(){
        index2=MyStack<T>::size_row/2;
    };
    ~Stack2();
 
    virtual bool full(){
        if(index2==this->size_row) return true;
        else return false;
    }
    virtual void push(T obj){
        if(full()) cout<<"\nstack2 overflow";
        else this->massive[index2++]=obj;
    }
    virtual bool empty(){
        if(index2==(this->size_row/2)) return true;
        else return false;
    }
    virtual void viewStack(){
        for(int k=MyStack<T>::size_row/2;k<index2;k++){
            cout<<"Stack1: "<<this->massive[k]<<" ";
        }
        cout<<endl;
    }
    virtual T top(){
        return this->massive[index2-1];
    }
    virtual void pop(){
        if(empty()) cout<<"stack2 underflow";
        else --index2;
    }
    virtual T maxValue(){
        T tmp;
        tmp=this->massive[index2];
        for(int k=index2-1;k>=size_row/2;k--){
            if(this->massive[k]>tmp) tmp=this->massive[k];
        }
        return tmp;
    }
};
//-------------------------------------------------------------------
//-------------------------------------------------------------------
void main()
{
    setlocale(LC_CTYPE,"Russian");
 
    int N, i, j;
    cout<<"Введите N: ";
    cin>>N;
 
    MyStack <int> massive(N);
    Stack1 <int> set1;
    Stack2 <int> set2;
    for(int k=0;k<N;k++){
        cout<<"Введите пару чисел i, j: ";
        cin>>i>>j;
        assert(i==1 || i==2);
        if(i==1){
            if(j>0) set1.push(j);
            if(j<=0) set1.pop();
            set1.viewStack();
        }
        if(i==2){
            if(j>0) set2.push(j);
            if(j<=0) set2.pop();
            set2.viewStack();
        }
    }
    cout<<"Максимальное значение Stack1: "<<set1.maxValue()<<endl;
    cout<<"Максимальное значение Stack2: "<<set2.maxValue()<<endl;
}
Ошибки
Код
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall MyStack<int>::push(int)" (?push@?$MyStack@H@@UAEXH@Z)"
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual bool __thiscall MyStack<int>::empty(void)" (?empty@?$MyStack@H@@UAE_NXZ)"
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall MyStack<int>::viewStack(void)" (?viewStack@?$MyStack@H@@UAEXXZ)"
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall MyStack<int>::top(void)" (?top@?$MyStack@H@@UAEHXZ)"
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall MyStack<int>::pop(void)" (?pop@?$MyStack@H@@UAEXXZ)"
1>Исходный код.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall MyStack<int>::maxValue(void)" (?maxValue@?$MyStack@H@@UAEHXZ)"
1>Исходный код.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Stack1<int>::~Stack1<int>(void)" (??1?$Stack1@H@@QAE@XZ) в функции _main
1>Исходный код.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Stack2<int>::~Stack2<int>(void)" (??1?$Stack2@H@@QAE@XZ) в функции _main

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 04:58
Ответы с готовыми решениями:

не могу разобраться с ошибками
Приветствую всех форумчан!!! Столкнулся со следующей проблемой: при компиляции...

Разобраться с ошибками
что нужно исправить #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include...

Разобраться с ошибками в программе
#include &lt;uniostream&gt; ; using namespace std; void main() { char...

Разобраться с ошибками в коде
подскажите, ошибки в коде есть подчеркиваются &quot;красным&quot; они, препод говорит,...

Разобраться с ошибками в программе
#include &lt;stdio.h&gt; using namespace std; int main(void) {...

1
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.11.2012, 05:38 #2
Нет реализаций методов MyStack и двух деструкторов: ~Stack1() и ~Stack2().
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2012, 05:38

Разобраться с ошибками в коде
что я делаю неправильно вот код программы #include &lt;iostream.h&gt; #include...

Как разобраться с ошибками в коде
Помогите пожалуйста разобраться с ошибками в коде вот код: #include...

Наследование и шаблоны
Доброго времени суток всем! Требуется внести ясность в следующую задачу....


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

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

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