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 ответов

25 просмотров

Оберните код в теги: 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
Всё писать в хедере, ясно дело

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта