Задание: Смоделировать стек на базе статического массива по заданию. Написать основные операции для работы со стеком (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, не используется, но и-го стека изымается один элемент. После обработки всей заданной входной последовательности определить наибольший элемент каждого стека. Код программы: Code: #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; } Ошибки: Code: 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 Подскажите пожалуйста из-за чего эти ошибки?