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.
А что не понял? Код в теги. И вообще удали и перезалей на пасту. Да и зачем, если я тебе уже сказал в чём дело
Ну это лишь через твой хрустальный...
Определение шаблона должно быть доступно в точке инстанцирования. Повторяю: шаблоны нельзя разделять на хедер и реализацию. Понятно?
Хотя да,,, похоже ты прав
хм... а как тогда в таком случае поступать?
Всё писать в хедере, ясно дело
буду знать, спасибо
Либо делать два хедера, один с интерфейсом, другой с имплементацией, и в клиентский код инклюдить имплкментацию. Есть другой вариант, если знаешь заранее множество типов, которые нужно инстанциировать
Да, но кому оно тут нужно это знание...
Обсуждают сегодня