Programación General > C/C++
Suma de elementos de vector con plantillas
(1/1)
antlcn:
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++ ---#include<iostream>#include<suma.h>#include<stdlib.h>using namespace std;using namespace values; intmain(void){ Suma<int> S; int *V, nElementos; cout<<"Introduce el numero de elementos del vector: "<<endl; cin>>nElementos; V=(int *)malloc(nElementos*sizeof(int)); S.sumar(V, nElementos); cout<<S.getResult()<<endl; free(V); return 0;}
suma.h:
--- Código: C++ ---#ifndef _SUMA_H_#define _SUMA_H_ namespace values{ /** Brief esta clase realiza la suma de un vector */ template<class Type> class Suma { public: /** Suma los elementos de un vector */ void sumar(Type *p, int nElementos); Type getResult() { return _res; } private: Type _res; };} template<class Type> void Suma<Type>::sumar(Type *p, int nElementos) { int i; for(i=0;i<nElementos;i++){ _res=res+*(p+i); } } #endif
gracias de antemano.
m0skit0:
¿Qué error te da exactamente?
antlcn:
--- Cita de: "m0skit0" ---¿Qué error te da exactamente?
--- Fin de la cita ---
me da un error que dice "expected initilizer before "<" token
ProfesorX:
Tienes la Clase Sumar dentro de un namespace, pero mas adelante la definicion del metodo
--- Código: C++ --- template<class Type>void Suma<Type>::sumar(Type *p, int nElementos) esta fuera del namespace, simplemente coloca el metodo dentro del namespace, ademas
--- Código: C++ ---_res=res+*(p+i);
esta equivocada la variable res, deberia ser:
--- Código: C++ ---_res=_res+*(p+i);
claramente olvidaste un _
Saludos :)
Amilius:
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++ --- Suma () : _res(0) {};
Navegación
Ir a la versión completa