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

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

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

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

03.11.2012, 04:58. Просмотров 383. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 04:58     Не могу разобраться с ошибками, наследование и шаблоны
Посмотрите здесь:

Разобраться с ошибками - C++
что нужно исправить #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int main () { struct strc { ...

Разобраться с ошибками в коде - C++
подскажите, ошибки в коде есть подчеркиваются &quot;красным&quot; они, препод говорит, что это связано с неуниверсальностью кода код: #include...

Разобраться с ошибками в программе - C++
#include &lt;stdio.h&gt; using namespace std; int main(void) { setlocale(LC_ALL,&quot;Russian&quot;); char name1, name2, name3; char pr1,...

Разобраться с ошибками в коде - C++
что я делаю неправильно вот код программы #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int main () { ...

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

Как разобраться с ошибками в коде - C++
Помогите пожалуйста разобраться с ошибками в коде вот код: #include &lt;iostream.h&gt; #include &lt;string.h&gt; int main () { ...

Наследование и шаблоны - C++
Доброго времени суток всем! Требуется внести ясность в следующую задачу. Существует абстрактный класс AbstractGenerator&lt;имя типа&gt; (не...

Наследование и шаблоны - C++
Почему при использовании шаблонов при обращении к элементам класса нужно явно указывать потомка или this? Ведь при наследовании без...

Наследование и шаблоны - C++
Здравствуйте. У меня возникла проблема. Есть 4 класса: Father - абстрактный шаблонный класс (типа интерфейс) Son - его потомок с...

Наследование и шаблоны - C++
Не понимаю почему выдается ошибки, переменные а, b не объявлены в данном контексте (внутри функции f) Сейчас почитал прату, и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.11.2012, 05:38     Не могу разобраться с ошибками, наследование и шаблоны #2
Нет реализаций методов MyStack и двух деструкторов: ~Stack1() и ~Stack2().
Ответ Создать тему
Опции темы

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