nullptr;
                  
                  
                    this.count = 0;
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  STACK<T>::~STACK()
                  
                  
                  {
                  
                  
                      if (count > 0) {
                  
                  
                          delete[] stack;
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  void STACK<T>::push(T item)
                  
                  
                  {
                  
                  
                      T* tmp;
                  
                  
                      tmp = stack;
                  
                  
                  
                  
                  
                      stack = new T[count + 1];
                  
                  
                      count++;
                  
                  
                  
                  
                  
                      // скопировать данные из памяти, мусор
                  
                  
                      for (int i = 0; i < count - 1; i++) {
                  
                  
                          stack[i] = tmp[i];
                  
                  
                      }
                  
                  
                      stack[count - 1] = item;
                  
                  
                  
                  
                  
                      if (count > 1) {
                  
                  
                          delete[] tmp;
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  T STACK<T>::pop()
                  
                  
                  {
                  
                  
                      if (count == 0) {
                  
                  
                          return 0; 
                  
                  
                      }
                  
                  
                      count--;
                  
                  
                      return stack[count];
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  T STACK<T>::Head()
                  
                  
                  {
                  
                  
                      if (count == 0) {
                  
                  
                          return 0;
                  
                  
                      }
                  
                  
                      return stack[count - 1];
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  void STACK<T>::Print()
                  
                  
                  {
                  
                  
                      T* p;
                  
                  
                      p = stack;
                  
                  
                  
                  
                  
                      if (count == 0) {
                  
                  
                          cout << "Stack is empty. push pls..." << endl;
                  
                  
                      }
                  
                  
                      else {
                  
                  
                          cout << "Stack: " << endl;
                  
                  
                  
                  
                  
                          for (int i = 0; i < count; i++)
                  
                  
                          {
                  
                  
                              cout << "Item[" << i << "] = " << *p << endl;
                  
                  
                              p++; // переносим указатель на некс элементик
                  
                  
                          }
                  
                  
                          cout << endl;
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  int STACK<T>::Count()
                  
                  
                  {
                  
                  
                      return count;
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  bool STACK<T>::IsEmpty()
                  
                  
                  {
                  
                  
                      bool flag = false;
                  
                  
                      count ? flag = true : flag = false;
                  
                  
                  
                  
                  
                      return flag;
                  
                  
                  }
                  
                  
                  
                  
                  
                  template<typename T>
                  
                  
                  STACK<T>::STACK(const STACK<T>& st) {
                  
                  
                       try {
                  
                  
                        // 1. Выделить новый участок памяти для массива stack
                  
                  
                        stack = new T[st.count];
                  
                  
                  
                  
                  
                        // 2. Скопировать данные из st в текущий объект
                  
                  
                        count = st.count;
                  
                  
                        for (int i = 0; i < count; i++)
                  
                  
                          stack[i] = st.stack[i];
                  
                  
                      }
                  
                  
                      catch (bad_alloc e)
                  
                  
                      {
                  
                  
                        // если память не выделилась, то вывести соответствующее сообщение
                  
                  
                        cout << e.what() << endl;
                  
                  
                      }
                  
                  
                  }
                  
                  
                
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
В общем-то, я угадал, хотя сюда не надо кидать свои портянки кода
что то не совсем понял...
так а ошибко где?
Да не нужна ошибка, и так всё ясно
запускаю и вот это 1>lab-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STACK<int>::STACK<int>(void)" (??0?$STACK@H@@QAE@XZ) в функции _main. 1>lab-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STACK<int>::~STACK<int>(void)" (??1?$STACK@H@@QAE@XZ) в функции _main. 1>lab-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall STACK<int>::push(int)" (?push@?$STACK@H@@QAEXH@Z) в функции _main. 1>lab-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall STACK<int>::Print(void)" (?Print@?$STACK@H@@QAEXXZ) в функции _main. 1>lab-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall STACK<int>::Count(void)" (?Count@?$STACK@H@@QAEHXZ) в функции _main.
А что не понял? Код в теги. И вообще удали и перезалей на пасту. Да и зачем, если я тебе уже сказал в чём дело
Ну это лишь через твой хрустальный...
Определение шаблона должно быть доступно в точке инстанцирования. Повторяю: шаблоны нельзя разделять на хедер и реализацию. Понятно?
Хотя да,,, похоже ты прав
хм... а как тогда в таком случае поступать?
Всё писать в хедере, ясно дело
буду знать, спасибо
Либо делать два хедера, один с интерфейсом, другой с имплементацией, и в клиентский код инклюдить имплкментацию. Есть другой вариант, если знаешь заранее множество типов, которые нужно инстанциировать
Да, но кому оно тут нужно это знание...
Обсуждают сегодня