• Jueves 14 de Noviembre de 2024, 04:36

Autor Tema:  Suma de elementos de vector con plantillas  (Leído 2373 veces)

antlcn

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Suma de elementos de vector con plantillas
« en: Jueves 27 de Enero de 2011, 17:44 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Suma de elementos de vector con plantillas
« Respuesta #1 en: Jueves 27 de Enero de 2011, 18:57 »
0
¿Qué error te da exactamente?

antlcn

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Suma de elementos de vector con plantillas
« Respuesta #2 en: Jueves 27 de Enero de 2011, 19:13 »
0
Cita de: "m0skit0"
¿Qué error te da exactamente?


me da un error que dice "expected initilizer before "<" token

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Suma de elementos de vector con plantillas
« Respuesta #3 en: Jueves 27 de Enero de 2011, 20:09 »
0
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 :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Suma de elementos de vector con plantillas
« Respuesta #4 en: Jueves 27 de Enero de 2011, 20:53 »
0
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.