title: Linked list with Template
body: <p>I need to build a linked list with a template, but I have no idea why is not working, I've built linked lists before, but never with templates. Right now my problem is that, if I create the list everything is ok, but when I try to insert something to it, I get the following errors:</p>
  
  <pre><code>Error   C2664   'Nodo&lt;D&gt;::Nodo(Nodo&lt;D&gt; &amp;&amp;)': cannot convert argument 1 from 'const int' to 'const Nodo&lt;D&gt; &amp;'    Datos2  d:\google drive\visual studio 2015\projects\datos2\datos2\listaSimple.h 69
  
  
  Error   C2664   'Nodo&lt;D&gt;::Nodo(Nodo&lt;D&gt; &amp;&amp;)': cannot convert argument 1 from 'const int' to 'const Nodo&lt;D&gt; &amp;'    Datos2  d:\google drive\visual studio 2015\projects\datos2\datos2\listaSimple.h 73
  </code></pre>
  
  <p>with my following code:</p>
  
  <pre><code>    //linkedList.h
  #pragma once
  #ifndef _LISTASIMPLE_H
  #define _LISTASIMPLE_H
  
  template&lt;class D&gt; 
  struct Nodo
  {
      int carga;
      int binario;
  
      D caracter;
  
      Nodo&lt;D&gt; *Siguiente;//means next
  };
  
  
  
  template&lt;class D&gt;
  class listaSimple
  {
  
  public:
      listaSimple();
      ~listaSimple();
  
      void InsertarInicio(const D&amp;);
      bool ListaVacia();
      void Mostrar();
  
  
  
  
  private:
      Nodo&lt;D&gt; *primero;
      Nodo&lt;D&gt; *ultimo;
  
  };
  
  template&lt;class D&gt; 
  listaSimple&lt;D&gt;::listaSimple()
  {
      primero = NULL;
  }
  
  template&lt;class D&gt;
  listaSimple&lt;D&gt;::~listaSimple()
  {
      Nodo&lt;D&gt; *aux;
      while (primero != NULL)
      {
          aux = primero;
          primero = primero-&gt;Siguiente;
          delete aux;
      }
  }
  
  template&lt;class D&gt;
  void listaSimple&lt;D&gt;::InsertarInicio(const D&amp; dato)
  {
      if (ListaVacia())
      {
          primero = new Nodo&lt;D&gt;(dato);
      }
      else
      {
          Nodo&lt;D&gt; *nodoNuevo = new Nodo&lt;D&gt;(dato);
          nodoNuevo-&gt;Siguiente = primero;
          primero = nodoNuevo;
      }
  }
  
  template&lt;class D&gt;
  bool listaSimple&lt;D&gt;::ListaVacia()
  {
      if (primero == NULL)
      {
          return true;
      }
      else
      {
          return false;
      }
  }
  
  template&lt;class D&gt;
  inline
  void listaSimple&lt;D&gt;::Mostrar()
  {
      Nodo&lt;D&gt; *aux = primero;
      while (aux != NULL)
      {
          cout &lt;&lt; aux-&gt;caracter &lt;&lt; "-&gt;";
          aux = aux-&gt;Siguiente;
      }
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>//Source.cpp
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include "linkedList.h"
  
  
  using namespace std;
  
  int main() {
      listaSimple&lt;int&gt; Nueva;
      Nueva.InsertarInicio(5);
  
      system("pause");
      return 0;
  }
  </code></pre>