Шаблоны и отдельная подборка

Я хочу написать программу на C ++ с отдельной компиляцией, и я написал это:

main.cpp

#include <iostream>
#include "Stack.h"
using namespace std;
int main(int argc,char* argv[])
{
    Stack<int> st;
    st.push(1);
    return 0;
}

Stack.h

#ifndef _STACK_H
#define _STACK_H
template<typename T> 
class Stack
{
private:
struct Node
{
    Node* _prev;
    T _data;
    Node* _next;
};
int _size;
Node* _pos;

public:
    Stack();
    T pop();
    void push(T  const &el);
    int getSize() const;
};
#endif

Stack.hpp

#include "Stack.h"
#include <malloc.h>
template <typename T>
Stack<T>::Stack()
{
    _size = 0;
    _pos = (Node*)malloc(sizeof(Node));
    _pos->_prev = NULL;
    _pos->_next = NULL;
}
template <typename T>
T Stack<T>::pop()
{
    if (_size == 0)
        return NULL;
    T tmp = _pos->_data;
    if (_pos->_prev == NULL)
        free(_pos);
    else
    {
        _pos->_prev->_next = _pos->_next;
        if (_pos->_next != NULL)
        {
    _pos->_next->_prev = _pos->_prev;
        }
        free(_pos);
    }
    _size--;
    return tmp;
}
template <typename T>
void Stack<T>::push(T const &el)
{
    Node* n = (Node*)malloc(sizeof(Node));
    _pos->_next = n;
    n->_prev = _pos;
    n->_data = *el;
    _pos = n;
    _size ++;
}
template<typename T> 
int Stack<T>::getSize() const {return _size;};

Я скомпилировал программу с g ++, и я получаю эту ошибку:

ccyDhLTv.o:main.cpp:(.text+0x16): undefin
ed reference to `Stack<int>::Stack()'
ccyDhLTv.o:main.cpp:(.text+0x32): undefin
ed reference to `Stack<int>::push(int const&)'
collect2: ld returned 1 exit status

Я знаю, что проблема в том, что я использую шаблоны, но я не знаю, как это исправить.

ОС - строка компиляции Windows -g++ main.cpp Stack.h Stack.hpp -o main.exe

Ответы на вопрос(2)

Ваш ответ на вопрос