I write a LinkedList class and a test function to test my class. However, I met some problems while compiling and running my program. There are three files: test.cpp LinkedList.cpp and LinkedList.h.  
test.cpp:
#include "LinkedList.cpp"
#include <string>
#include <iostream>
using namespace std;
// Loading Array into Linked List for testing
template <class T, size_t n>
void fillArrayIn(LinkedList<T> &list, T (&arr)[n])
{
     unsigned int length = sizeof(arr) / sizeof(*arr);
     for (unsigned int i = 0; i < length; i++)
     {
          list.append(arr[i]);
     }
}
int main()
{
     // Integer LinkedList
     cout << "=====================================" << endl;
     cout << "Test for Integer LinkedList" << endl
          << endl;
     LinkedList<int> intList;
     cout << "Is List Empty? " << (intList.isEmpty() ? "Yes" : "No") << endl
          << endl; // Test isEmpty()
     int intArray[] = {1, 2, 5, 6, 9, 0, 1};
     fillArrayIn(intList, intArray); // Test appending
     cout << "Array Loaded" << endl;
     cout << "Is List Empty? " << (intList.isEmpty() ? "Yes" : "No") << endl;
     intList.printAll();
     intList.insert(*(new int(100)), 3); // Test insertion
     cout << endl
          << "Insert 100 to position 3" << endl;
     intList.printAll();
     cout << "Insert integer outside the List: "
          << (intList.insert(*(new int(100)), 100) ? "Success" : "Fail") << endl
          << endl; // Test illegal insertion
     cout << "Find the position of integre 9: " << intList.positionOf(9) << endl; // Test get the position of element in List
     cout << "Find the position of not existed element: " << intList.positionOf(20) << endl
          << endl; // Test get the position of not existed element
     cout << "The element at position 0 is " << *(intList.get(0)) << endl; // Test get element
     cout << "The element at position 7 is " << *(intList.get(7)) << endl;
     cout << "The element at position 8 is " << intList.get(8) << endl
          << endl;
     cout << "Deleting 100 from list: "
          << (intList.remove(*(new int(100))) ? "Sucess" : "Fail") << endl;
     intList.printAll();
     cout << "Deleting not existed element from list: "
          << (intList.remove(*(new int(20))) ? "Sucess" : "Fail") << endl;
     intList.printAll();
}
LinkedList.cpp:
#include <string>
#include <iostream>
#include "LinkedList.h"
using namespace std;
template <class T>
LinkedList<T>::LinkedList()
{
    head = new Node(NULL);
}
template <class T>
void LinkedList<T>::append(T &_data)
{
    Node *current = head;
    while (current->next)
    {
        current = current->next;
    }
    current->next = new Node(&_data);
    // cout << _data <<" has been appended to the list."<<endl;
}
template <class T>
bool LinkedList<T>::insert(T &_data, const int position)
{
    Node *current = head;
    Node *previous = head;
    for (int i = position + 1; i > 0; i--)
    {
        if (!current->next)
            return false;
        previous = current;
        current = current->next;
    }
    previous->next = new Node(&_data);
    previous->next->next = current;
    return true;
}
template <class T>
T *LinkedList<T>::get(int position)
{
    Node *current = head;
    for (int i = position + 1; i > 0; i--)
    {
        if (!current->next)
            return NULL;
        current = current->next;
    }
    return current->data;
}
template <class T>
bool LinkedList<T>::isEmpty()
{
    if (head->next)
        return false;
    return true;
}
template <class T>
bool LinkedList<T>::remove(const T &_data)
{
    Node *current = head;
    Node *previous = current;
    while (current->next)
    {
        previous = current;
        current = current->next;
        if (*(current->data) == _data)
        {
            previous->next = current->next;
            return true;
        }
    }
    return false;
}
template <class T>
int LinkedList<T>::positionOf(const T &_data)
{
    Node *current = head;
    unsigned int position = -1;
    while (current->next)
    {
        current = current->next;
        position++;
        if (*(current->data) == _data)
            return position;
    }
    return -1;
}
template <class T>
void LinkedList<T>::printAll()
{
    Node *current = head;
    while (current->next)
    {
        current = current->next;
        cout << *(current->data) << "  ";
    }
    cout << endl;
}
template <class T>
class LinkedList<T>::Node
{
  public:
    Node(T *_data) : data(_data) {}
    T *data;
    Node *next;
};
LinkedList.h:
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
template <class T>
class LinkedList
{
  public:
    LinkedList();
    void append(T &);
    bool insert(T &, const int);
    T *get(int);
    bool isEmpty();
    bool remove(const T &);
    int positionOf(const T &);
    void printAll();
  private:
    class Node;
    Node *head;
};
#endif
When I compile my program with g++, it compiled successfully and give out the expected result:
=====================================
Test for Integer LinkedList
Is List Empty? Yes
Array Loaded
Is List Empty? No
1  2  5  6  9  0  1
Insert 100 to position 3
1  2  5  100  6  9  0  1
Insert integer outside the List: Fail
Find the position of integre 9: 5
Find the position of not existed element: -1
The element at position 0 is 1
The element at position 7 is 1
The element at position 8 is 0
Deleting 100 from list: Sucess
1  2  5  6  9  0  1
Deleting not existed element from list: Fail
1  2  5  6  9  0  1
When I try to compile my program with cl (VS2017), the compilation is also successful. However, when I run the program, it will be stuck at a certain point. Running result:
=====================================
Test for Integer LinkedList
Is List Empty? No
Later, I try to create a project in Visual Studio. Surprisingly, this time, it runs without any problem.
How can I make it correct to use cl to compile? Thank you if you could give me some hints! I am a new learner in C++.
B.T.W. The object file and executable generated by cl are more than 200KB, which is much more than the ones g++ generated which are around 14KB.
 
     
    