Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

03.11.2012, 04:58. Просмотров 408. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу разобраться с ошибками, наследование и шаблоны (C++):

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

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

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

1
alsav22
5435 / 4830 / 442
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Наследование и шаблоны - C++
Доброе время суток. Есть три класс: interface.h template &lt;class T&gt; class interface { public: ...

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

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


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

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

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