elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  TAB CLista de template
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: TAB CLista de template  (Leído 1,356 veces)
chicainge

Desconectado Desconectado

Mensajes: 15


Ver Perfil
TAB CLista de template
« en: 10 Junio 2014, 14:02 pm »

Buenas el problema que tengo es que no se como usar el template en el cpp del hpp en este programita:

Código:
#include <iostream>
#include <string>
#include "TLista.hpp"
using namespace std;
using namespace bblLista;

int main()
{
    char tipo;
    CLista<tipo> a;
    unsigned nnodos;
    char car;
    unsigned num;

    cout<<"MENU:"<<endl<<"1.INSERTAR NODOS"<<endl<<"2.ELIMINAR NODO"<<endl<<"3.ESCRIBIR LISTA"<<endl<<"4.BORRAR LISTA"<<endl;
    cin>>num;
    switch(num){
        case 1:
          cout<<"Cuantos nodos desea insertar? ";
          cin>>nnodos;
          for(unsigned i=0;i<=nnodos; i++){
          cout<<"Introduce el caracter: ";
          cin>>car;
          insertar(a,car);
          }
        break;
        case 2:
          cout<<"Escriba el caracter del nodo que desea eliminar: ";
          cin>>car;
          eliminar(a,car);
        break;
        case 3:
           consultarlista(a);
        break;
        case 4:
           borrarlista(a);
        break;
    }


}

el CLista.hpp

Código:
#ifndef _TLISTA_HPP_
#define _TLISTA_HPP_

#include <iostream>
#include <cstdlib>

using namespace std;

namespace bblLista{
  const unsigned int MAX_LISTA = 100; // Máximo tamaño de la lista

  template <typename tipo>
  class CLista{
    public:
       CLista();
       void insertar(CLista &lista, const char car);
       void eliminar(CLista &lista,const char car);
       void consultarlista(CLista &lista);
       void borrarlista(CLista &lista);
    private:

      struct TpNodo{
         tipo car;
         TpNodo *sig;
      };
      typedef TpNodo *puntalista;
      puntalista lista;
      unsigned longitud;
      //metodos pribados
      void insertaralprincipio(CLista &lista, const char car);
      void insertaralfinal(CLista &lista, const char car);
  }; // Fin de CLista
} // Fin de bblLista

#endif

y aqui es donde tengo el problemaa:

Código:
#include "CLista.hpp"
#include <iostream>
#include <cstdlib>
using namespace std;
using namespace bblLista;
  template <typename tipo>
  CLista<tipo>::CLista(): longitud(0) {};

  template <typename tipo>
  void CLista<tipo>::insertaralprincipio(CLista lista, const tipo car){
      TpNodo pun;//puntero auxiliar

      pun=new TpNodo;
      pun->car=car;
      pun->sig=lista;//recuerda que esetamos insertando al principio
      lista=pun;//lista señalaba a otro nodoya creado.
  }

  template <typename tipo>
  void CLista<tipo>::insertaralfinal(CLista &lista, const tipo car){
      TpNodo pun;
      pun=lista;
      while(pun->sig != NULL){
        pun=pun->sig;
      }
      pun->sig=new TpNodo;
      pun=pun->sig;
      pun->car=car;
      pun->sig=NULL;

      }



  template <typename tipo>
  void CLista<tipo>::insertar(CLista &lista, const tipo car){
      if(lista !=NULL){
        insertaralfinal(lista,car);
      }
      else insertaralprincipio(lista,car);
      ++longitud;
  }
  void CLista<tipo>::eliminar(CLista &lista,const tipo car){
      TpNodo pun,aux;
      pun=lista;
      while(pun->car!=car || pun->sig !=NULL){
        aux=pun;
        pun=pun->sig;
      }
      if(pun->sig==NULL){
        aux->sig=NULL;
        delete pun;
      }
      else {
        aux->sig=pun->sig;
        delete pun;
      }
     --longitud;
}

template <typename tipo>
void CLista<tipo>::consultarlista(CLista &lista){
      TpNodo pun;
      pun=lista;
      for(unsigned i=0; i<= longitud; i++){
        cin<<pun->car;
        pun=pun->sig;
      }
}

template <typename tipo>
void CLista<tipo>::borrarlista(CLista &lista){
    TpNodo aux;
  while(lista !=NULL){
    aux=lista;
    lista=lista->sig;
    delete aux;
  }
}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: TAB CLista de template
« Respuesta #1 en: 10 Junio 2014, 14:36 pm »

Los templates no pueden tener código en el cpp. Tiene que estar todo en la cabecera.

La razón es sencilla. El compilador, al encontrarse con un template no lo compila, lo guarda y cada vez que encuentra un uso diferente del template crea y compila una clase específica para ese uso.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nuevo template
Sugerencias y dudas sobre el Foro
pitufo 4 4,285 Último mensaje 15 Enero 2004, 16:49 pm
por BADBYTE-K
opinion de una template « 1 2 3 4 »
Diseño Gráfico
MinusFour 31 9,464 Último mensaje 5 Abril 2005, 04:00 am
por White^^croW
Otro template :P
Diseño Gráfico
Villamil 5 2,346 Último mensaje 14 Abril 2005, 01:10 am
por NelxoN
Medidas Template
Diseño Gráfico
White^^croW 3 1,851 Último mensaje 14 Abril 2005, 17:11 pm
por White^^croW
Template
Diseño Gráfico
+ enrique ZP 7 2,731 Último mensaje 23 Septiembre 2005, 22:56 pm
por wvb
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines