I have a queue class that has this definition:
    template <typename T>
    class SharedQueue
    {
    public:
        SharedQueue();
        ~SharedQueue();
    };
In test.h, I have as one of the variables in the class:
SharedQueue<int>* sharedQueue;
In test.cpp, I am trying to do:
sharedQueue = new SharedQueue<int>;
But, for some reason, it's giving me errors. Am I not initializing the template class properly?
I looked and noticed this: Why can templates only be implemented in the header file? but it's difficult to see how relevant that is to me
UPDATE: The error is
Error   LNK2001 unresolved external symbol "public: __cdecl SharedQueue<int>::SharedQueue<int>(void)" (??0?$SharedQueue@H@@QEAA@XZ) Demo    C:\test\foo.obj 1       
1 unresolved externals
UPDATE TWO:
SharedQueue.h:
#pragma once
#include <queue>
#include <mutex>
#include <condition_variable>
template <typename T>
class SharedQueue
{
public:
    SharedQueue();
    ~SharedQueue();
    T& front();
    void pop_front();
    void push_back(const T& item);
    void push_back(T&& item);
    int size();
    bool empty();
private:
    std::deque<T> queue_;
    std::mutex mutex_;
    std::condition_variable cond_;
};
SharedQueue.cpp:
#include "SharedQueue.h"
template <typename T>
SharedQueue<T>::SharedQueue()
{
}
template <typename T>
SharedQueue<T>::~SharedQueue()
{
}
template <typename T>
T& SharedQueue<T>::front()
{
    std::unique_lock <std::mutex> mlock(mutex_);
    while (queue_.empty())
    {
        cond_.wait(mlock);
    }
    return queue_.front();
}
template <typename T>
void SharedQueue<T>::pop_front()
{
    std::unique_lock<std::mutex> mlock(mutex_);
    while (queue_.empty())
    {
        cond_.wait(mlock);
    }
    queue_.pop_front();
}
template <typename T>
void SharedQueue<T>::push_back(const T& item)
{
    std::unique_lock<std::mutex> mlock(mutex_);
    queue_.push_back(item);
    mlock.unlock();
    cond_.notify_one();
}
template <typename T>
void SharedQueue<T>::push_back(T&& item)
{
    std::unique_lock<std::mutex> mlock(mutex_);
    queue_.push_back(std::move(item));
    mlock.unlock();
    cond_.notify_one();
}
template <typename T>
int SharedQueue<T>::size()
{
    std::unique_lock<std::mutex> mlock(mutex_);
    int size = queue_.size();
    mlock.unlock();
    return size;
}
