title: How to use template as argument in constructor while overloading operators?
body: <p>I am making program in which I create class for vector and overload different operators. Now I want to make arguments of vector (coordinates) as templates. 
  When I have all code in one file everything is alright and program is running correctly:</p>
  
  <pre><code>#ifndef VECTOR4D_H_INCLUDED
  #define VECTOR4D_H_INCLUDED
  template &lt;typename TYPE&gt;
  class VECTOR4D{
      public:
         VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
         VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
         TYPE X, Y, Z, T;
  
         VECTOR4D &amp;operator+=(VECTOR4D &amp;K){
             this-&gt;X += K.X;
             this-&gt;Y += K.Y;
             this-&gt;Z += K.Z;
             this-&gt;T += K.T;
  
             return *this;
         }
  };
  
  
  #endif // VECTOR4D_H_INCLUDED
  </code></pre>
  
  <p>but when I separate implementation and declaration of overload operator I have a problem.</p>
  
  <pre><code>//vector4d.h
  #ifndef VECTOR4D_H_INCLUDED
  #define VECTOR4D_H_INCLUDED
  template &lt;typename TYPE&gt;
  class VECTOR4D{
      public:
          VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
          VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
          TYPE X, Y, Z, T;
  
          VECTOR4D &amp;operator+=(VECTOR4D &amp;);
  };
  
  
  #endif // VEKTOR4D_H_INCLUDED
  
  //project.cpp
  #include &lt;iostream&gt;
  #include "vector4d.h"
  
  VECTOR4D &amp;VECTOR4D::operator+=(VECTOR4D &amp;K)
  {
      this-&gt;X += K.X;
      this-&gt;Y += K.Y;
      this-&gt;Z += K.Z;
      this-&gt;T += K.T;
  
      return *this;
  }
  </code></pre>
  
  <p>During compilation i have got an error:</p>
  
  <pre><code>invalid use of template-name 'VECTOR4D' without an argument list
  </code></pre>
  
  <p>How I have to do this to make it correct?</p>