What is this error? (And why doesn't it occur in other classes?) <p>I'm trying to write a some container classes for implementing primary data structures in C++. The header file is here:</p> <pre><code>#ifndef LINKEDLIST1_H_ #define LINKEDLIST1_H_ #include &lt;iostream&gt; using namespace std; template&lt;class T&gt; class LinkedList1; template&lt;class T&gt; class Node; template&lt;class T&gt; class Node { friend class LinkedList1&lt;T&gt; ; public: Node&lt;T&gt; (const T&amp; value) { this-&gt;Data = value; this-&gt;Next = NULL; } Node&lt;T&gt; () { this-&gt;Data = NULL; this-&gt;Next = NULL; } T Data; Node* Next; }; template&lt;class T&gt; class LinkedList1 { friend class Node&lt;T&gt; ; public: LinkedList1(); // LinkedList1&lt;T&gt;(); ~LinkedList1(); // Operations on LinkedList Node&lt;T&gt;* First(); int Size(); int Count(); bool IsEmpty(); void Prepend(Node&lt;T&gt;* value); //O(1) void Append(Node&lt;T&gt;* value); void Append(const T&amp; value); void Insert(Node&lt;T&gt;* location, Node&lt;T&gt;* value); //O(n) Node&lt;T&gt;* Pop(); Node&lt;T&gt;* PopF(); Node&lt;T&gt;* Remove(const Node&lt;T&gt;* location); void Inverse(); void OInsert(Node&lt;T&gt;* value); // TODO Ordered insertion. implement this: foreach i,j in this; if i=vale: i+=vale, break; else if i&lt;=value&lt;=j: this.insert(j,value),break void print(); private: Node&lt;T&gt;* first; int size; }; #endif /* LINKEDLIST1_H_ */ </code></pre> <p>When I try to use it in another class, for example like this:</p> <pre><code>void IDS::craete_list() { LinkedList1&lt;int&gt; lst1 = LinkedList1&lt;int&gt;::LinkedList1&lt;int&gt;(); } </code></pre> <p>this error occurs:</p> <pre><code>undefined reference to 'LinkedList1&lt;int&gt;::LinkedList1&lt;int&gt;()' </code></pre> <p>The constructor of the class is public and its header file is included. I also tried to include the .cpp file of the class, but that didn't help. I wrote other classes such SparseMatrix and DynamicArray in exactly the same way and there was no error!...</p>