Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Templates con Lista de argumentos(...)

Estas en el tema de Templates con Lista de argumentos(...) en el foro de C/C++ en Foros del Web. Buenas, ando con un problema entre el listado de argumentos y los templates.. main.cpp @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original Vector < int > vec ...
  #1 (permalink)  
Antiguo 16/03/2010, 06:15
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Templates con Lista de argumentos(...)

Buenas, ando con un problema entre el listado de argumentos y los templates..

main.cpp
Código C++:
Ver original
  1. Vector<int> vec(1, 2, 3, 4);

Vector.h
Código C++:
Ver original
  1. #ifndef VECTOR
  2. #define VECTOR
  3.  
  4. #include <stdarg.h>
  5.  
  6.  
  7. template <typename t>
  8. class Vector
  9. {
  10.     private:
  11.         t* num;
  12.    
  13.     public:
  14.         Vector(t nums, ...); // problema!
  15.         ~Vector();
  16. };
  17.  
  18. #endif

Vector.cpp
Código C++:
Ver original
  1. #include "Vector.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. template <typename t>
  6. Vector<t>::Vector(t nums, ...) // problema!
  7. {
  8.     t temp;
  9.     va_list ap;
  10.    
  11.     va_start(ap, nums);
  12.    
  13.     for(int i=0; i<nums; ++i)
  14.     {
  15.         cout << va_arg(ap, t) << endl;
  16.     }
  17. }
  18.  
  19. template <typename t>
  20. Vector<t>::~Vector()
  21. {
  22.     delete num;
  23. }


Error:
Código devCpp:
Ver original
  1. C:\Doc...\main.o(.text+0xa1) In function `main':
  2.   [Linker error] undefined reference to `Vector<int>::Vector(int, ...)'
  3.   [Linker error] undefined reference to `Vector<int>::~Vector()'
  4.   [Linker error] undefined reference to `Vector<int>::~Vector()'
  5.   C:\Doc...\main.o(.text+0xa1) ld returned 1 exit status
  6.  C:\Doc...\Makefile.win [Build Error]  [Limit.exe] Error 1

El codigo anda bien sin stdarg o sin los templates... por X motivo no puedo usarlos al mismo tiempo...
Busque y encontre poco, existe la posibilidad de hacer esto? como seria?

saludos
  #2 (permalink)  
Antiguo 16/03/2010, 06:42
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Templates con Lista de argumentos(...)

solucionado, una burrada pido disculpas, necesito dormir =P
  #3 (permalink)  
Antiguo 16/03/2010, 06:43
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Templates con Lista de argumentos(...)

Hice "copy paste" de tu codigo al ambiente ubuntu que tengo aqui y compiló sin problemas -- agregando un main que no hacia nada.

Como es tu main() ?
Si quitas los parametros "... " y la referencia a stdarg desde el .h, pero mantienes el destructor, se va el problema de linkeo del destructor? Fijate que este no usa stdarg, de modo que seria bueno revisar el problema por partes

# [Linker error] undefined reference to `Vector<int>::~Vector()'
# [Linker error] undefined reference to `Vector<int>::~Vector()'

Desviando un poco el tema, el uso de parámetros indeterminados asi no se recomienda, por ejemplo, porque el compilador no te ayuda a chequear los tipos que pasas al invocar ese metodo, y dejas al usuario de la clase la responsabilidad de usar los tipos correctos, lo que usualmente trae problemas porque los usuarios olvidan o se equivocan, incluso uno mismo el creador de la clase, por que quieres hacer algo asi?

Etiquetas: argumentos, lista, template
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:00.