SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: antlcn en Jueves 27 de Enero de 2011, 17:44

Título: Suma de elementos de vector con plantillas
Publicado por: antlcn en Jueves 27 de Enero de 2011, 17:44
hola, tengo un problema con un ejemplo de programa en C++ que suma los elementos de un vector utilizando una clase plantilla, me da un error en la linea 21 de el archivo suma.h, a continuación pongo el código:

main.cpp:
Código: C++
  1. #include<iostream>
  2. #include<suma.h>
  3. #include<stdlib.h>
  4. using namespace std;
  5. using namespace values;
  6.  
  7. int
  8. main(void)
  9. {
  10.     Suma<int> S;
  11.     int *V, nElementos;
  12.     cout<<"Introduce el numero de elementos del vector: "<<endl;
  13.     cin>>nElementos;
  14.     V=(int *)malloc(nElementos*sizeof(int));
  15.     S.sumar(V, nElementos);
  16.     cout<<S.getResult()<<endl;
  17.     free(V);
  18.     return 0;
  19. }
  20.  



suma.h:
Código: C++
  1. #ifndef _SUMA_H_
  2. #define _SUMA_H_
  3.  
  4. namespace values{
  5.     /** Brief esta clase realiza la suma de un vector
  6.     */
  7.     template<class Type>
  8.     class Suma
  9.     {
  10.         public:
  11.             /** Suma los elementos de un vector
  12.              */
  13.             void sumar(Type *p, int nElementos);
  14.             Type getResult() { return _res; }
  15.         private:
  16.             Type _res;
  17.     };
  18. }
  19.  
  20. template<class Type>
  21.  void Suma<Type>::sumar(Type *p, int nElementos)
  22.  {
  23.      int i;
  24.      for(i=0;i<nElementos;i++){
  25.          _res=res+*(p+i);
  26.      }
  27.  }
  28.    
  29. #endif
  30.  


gracias de antemano.
Título: Re: Suma de elementos de vector con plantillas
Publicado por: m0skit0 en Jueves 27 de Enero de 2011, 18:57
¿Qué error te da exactamente?
Título: Re: Suma de elementos de vector con plantillas
Publicado por: antlcn en Jueves 27 de Enero de 2011, 19:13
Cita de: "m0skit0"
¿Qué error te da exactamente?


me da un error que dice "expected initilizer before "<" token
Título: Re: Suma de elementos de vector con plantillas
Publicado por: ProfesorX en Jueves 27 de Enero de 2011, 20:09
Tienes la Clase Sumar dentro de un namespace, pero mas adelante la definicion del metodo

Código: C++
  1.  
  2. template<class Type>
  3. void Suma<Type>::sumar(Type *p, int nElementos)
  4.  
  5.  
esta fuera del namespace, simplemente coloca el metodo dentro del namespace, ademas

Código: C++
  1. _res=res+*(p+i);
  2.  

esta equivocada la variable res, deberia ser:

Código: C++
  1. _res=_res+*(p+i);
  2.  

claramente olvidaste un _

Saludos :)
Título: Re: Suma de elementos de vector con plantillas
Publicado por: Amilius en Jueves 27 de Enero de 2011, 20:53
Además te falta declarar un constructor que pueda inicializar "_res", de lo contrario no está garantizado que el resultado sea el esperado.

Código: C++
  1.  
  2.              Suma () : _res(0)
  3.              {};
  4.  
  5.