170 похожих чатов

#Pragma once #include "STACK.h" #include <string> using namespace std; template<typename T> STACK<T>::STACK() { this.stack =

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;
}
}

16 ответов

10 просмотров

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

В общем-то, я угадал, хотя сюда не надо кидать свои портянки кода

Toha-Osipenko Автор вопроса

что то не совсем понял...

так а ошибко где?

Ilya Zviagin
так а ошибко где?

Да не нужна ошибка, и так всё ясно

Toha-Osipenko Автор вопроса
Ilya Zviagin
так а ошибко где?

запускаю и вот это 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.

Toha Osipenko
что то не совсем понял...

А что не понял? Код в теги. И вообще удали и перезалей на пасту. Да и зачем, если я тебе уже сказал в чём дело

Liber Azerate
Да не нужна ошибка, и так всё ясно

Ну это лишь через твой хрустальный...

Toha Osipenko
запускаю и вот это 1>lab-1.obj : error LNK2019: сс...

Определение шаблона должно быть доступно в точке инстанцирования. Повторяю: шаблоны нельзя разделять на хедер и реализацию. Понятно?

Toha-Osipenko Автор вопроса
Liber Azerate
Определение шаблона должно быть доступно в точке и...

хм... а как тогда в таком случае поступать?

Toha-Osipenko Автор вопроса
Liber Azerate
Всё писать в хедере, ясно дело

Либо делать два хедера, один с интерфейсом, другой с имплементацией, и в клиентский код инклюдить имплкментацию. Есть другой вариант, если знаешь заранее множество типов, которые нужно инстанциировать

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
12
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
I just installed it but how do I use it?
Talula
12
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Карта сайта