Ошибка LNK2019 ссылка на неразрешенный внешний символ "public: __cdecl listik::listik(void)

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

файл с main функцией

#include <iostream>
#include "listik.h"

int main()
{
    system("chcp 1251>nul");
    srand(10);

    listik<int> firstlist;

    for (size_t i = 0; i < 10; i++)
    {
        firstlist.push_forward(rand() % 10);
    }

    firstlist.push_back(20);
    firstlist.push_forward(20);
    firstlist.show_all();

    return 0;
}

h файл

#pragma once
#include <iostream>

template <class T>
class listik
{
public:

    listik();
    ~listik();

    class Node
    {
    public:
        Node(T data);
        ~Node();

        Node* next=nullptr;
        T data=NULL;

    };

    void push_forward(T data);
    void pull_forward();
    void push_back(T data);
    void pull_back();

    void show_all();

    Node* begin=nullptr;
    Node* end=nullptr;
    int count=0;
};

cpp файл, объявление некоторых функций, приложил не все для экономии места

#include "listik.h"

template<class T>
listik<T>::listik()
{
}

template<class T>
listik<T>::~listik()
{
    while (begin != nullptr)
    {
        pull_forward();
        --count;
    }
}

template<class T>
void listik<T>::push_forward(T data)
{
    Node* node = new Node(data);
    if (!count)
    {
        begin = node;
        end = node;
    }
    else
    {
        node->next = begin;
        begin = node;
    }

    ++count;
}

template<class T>
void listik<T>::pull_forward()
{
    if (count)
    {
        Node* ptr = begin;
        begin = begin->next;
        delete ptr;
    }
    --count;
}

Ответы (0 шт):