title: Error: Expected template-name before ‘<’ token in C++
body: <p>I got the error in the title wich cause a lot of other error and I really don't know how to solve it, the error starts when I tried to declare a list ListeTriee in the main, before that i didn't have any issue with that.</p>
  
  <p><strong>Errors</strong>:</p>
  
  <pre><code>In file included from Cours.h:10:0,
                   from ListeBase.h:13,
                   from ListeBase.cxx:1:
  Liste.h:12:51: error: expected template-name before ‘&lt;’ token
   template&lt;typename T&gt; class Liste: public ListeBase&lt;T&gt;
                                                     ^
  Liste.h:12:51: error: expected ‘{’ before ‘&lt;’ token
  Liste.h:12:51: error: expected unqualified-id before ‘&lt;’ token
  In file included from ListeBase.h:13:0,
                   from ListeBase.cxx:1:
  Cours.h:19:20: error: field ‘groupes’ has incomplete type
           Liste&lt;int&gt; groupes;
                      ^
  Cours.h: In member function ‘void Cours::insererGroupe(int)’:
  Cours.h:28:13: error: ‘groupes’ was not declared in this scope
               groupes.insere(val);
  </code></pre>
  
  <p>The files are :</p>
  
  <p><strong>ListeBase.h</strong>:</p>
  
  <pre><code>#ifndef LISTE_BASE
  #define LISTE_BASE
  #include &lt;stdlib.h&gt;
  #include &lt;iostream&gt;
  #include &lt;time.h&gt;
  
  using namespace std;
  
  #include "Timing.h"
  #include "Professeur.h"
  #include "Groupe.h"
  #include "Local.h"
  #include "Cours.h"
  
  template&lt;typename T&gt; struct Cellule
  {
      T valeur ;
      Cellule&lt;T&gt; *suivant ;
      Cellule(T v, Cellule&lt;T&gt; *s) : valeur(v), suivant(s) {};
  };
  
  template&lt;typename T&gt; class Iterateur;
  template&lt;typename T&gt; class ListeBase
  {
      protected:
          Cellule&lt;T&gt; *pTete ;
      public:
          ListeBase();
          ~ListeBase();
          bool estVide() const;
          int getNombreElements() const;
          void Affiche() const;
          virtual T* insere(const T &amp; val)=0;
                  friend class Iterateur&lt;T&gt;;
  };
  
  #endif
  </code></pre>
  
  <p><strong>Liste.h</strong></p>
  
  <pre><code>#ifndef LISTE
  #define LISTE
  #include &lt;stdlib.h&gt;
  #include &lt;iostream&gt;
  #include &lt;time.h&gt;
  
  using namespace std;
  
  #include "ListeBase.h"
  #include "Timing.h"
  
  template&lt;typename T&gt; class Liste: public ListeBase&lt;T&gt;
  {
      public:
          T* insere(const T &amp; val);
  };
  #endif
  </code></pre>
  
  <p><strong>Cours.h</strong></p>
  
  <pre><code>#ifndef COURS
  #define COURS
  
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;iostream&gt;
  
  using namespace std;
  
  #include "Liste.h"
  #include "Event.h"
  #include "Professeur.h"
  #include "Groupe.h"
  
  class Cours: public Event
  {
      private:
          char* professeur;
          Liste&lt;int&gt; groupes;
      public:
          Cours();
          Cours(const Cours &amp;);
          ~Cours();
          const char* getProfesseur() const;
          void setProfesseur(Professeur &amp;);
          void insererGroupe(int val)
          {
              groupes.insere(val);
          }
          void Affiche();
  };
  #endif
  </code></pre>
  
  <p>Thank you, if you need more details just ask.</p>