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)
| | |-+  Ayuda con c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con c++  (Leído 2,212 veces)
anon77

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Ayuda con c++
« en: 2 Mayo 2011, 17:59 pm »

Hola,
soy novato con c++ y uno de los primeros trabajos que tengo que hacer es realizar un vector con un índice inferior y otro superior o bien de un determinado tamaño.
Para ello tengo la clase Vector definida de esta forma:
class Vector
{
private:
   int indice_min, indice_max;
   int *data;
   // funciones
public:
  Vector(int size);            //Constructores
  Vector(int indMin,int indMax);
  ~Vector();                    //Destructor
  int& operator[](int i)
  //funciones
}

Pues bien, mi problema viene cuando utilizo el menú. Os pongo un pequeño fragmento de como sería:
if (opcion==1){
   cout<<"Size: "; cin>>sz; Vector a(sz);
   cout<< "Vector de tamaño"<<sz<<"creado"<<endl;
}
else if (opcion==2){
   cout<<"Posicion:";
   cin>>posicion;
   cout<<"Valor devuelto"<<?????????
}

Pues bien, mi duda viene en la opción 2, cuando quiero que me escriba por pantalla el valor que hay en las posicion seleccionada, que no sé exactamente que tendría que escribir donde están los interrogantes.

Y una pequeña duda más. He leído que los destructores son llamados automáticamente por el compilador. ¿Hay alguna forma de controlar ésto? Porque lo que me suele pasar es que le doy a la opción de crear vector y me aparece escrito por pantalla "vector creado" y seguido "vector borrado". Es decir, me llama al destructor justo después.

Muchas gracias de antemano


« Última modificación: 2 Mayo 2011, 22:23 pm por anon77 » En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Ayuda con c++
« Respuesta #1 en: 2 Mayo 2011, 18:47 pm »

No sé si entiendo muy bien lo que pides, pero si es que te imprima el valor del vector de la posicion "posicion" sería en ese caso a[posicion], utilizando el operador [] que es para eso.

Obviamente, suponiendo que tienes bien hecho tu el operador [] con la "trampa" para cambiar la posición según el indice mínimo que le tengas puesto.


En línea

anon77

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con c++
« Respuesta #2 en: 2 Mayo 2011, 18:56 pm »

No sé si entiendo muy bien lo que pides, pero si es que te imprima el valor del vector de la posicion "posicion" sería en ese caso a[posicion], utilizando el operador [] que es para eso.

Obviamente, suponiendo que tienes bien hecho tu el operador [] con la "trampa" para cambiar la posición según el indice mínimo que le tengas puesto.

Sí sí, es a eso a lo que me refiero. El operador [] lo tengo implementado para que funcione así y en un principio había puesto a[posicion] tal y como tú dices pero a la hora de compilarlo me ponía que a no estaba declarado.
Posiblemente será un error tonto pero repito que soy novato con c++ y aún me cuesta entenderlo  ;)
En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Ayuda con c++
« Respuesta #3 en: 2 Mayo 2011, 20:34 pm »

A ver, el problema es que con ese trozo de código no puedo saber exactamente como lo haces.

IMAGINO que estás creando una clase llamada IArray que hereda de la clase vector de STL. En este caso STL utiliza 2 operadores [], uno para lectura y otro para escritura.

Código:
template <class T>
T & operator[]( int index )

template <class T>
const T & operator[]( int index ) const

Deberías implementar el operador [] que te falta, el constante. Internamente tiene que hacer exactamente lo mismo que el otro.

No sé si el problema vendrá por ahí, porque ya te digo, a la vista de ese código no veo nada más a simple vista.
En línea

anon77

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con c++
« Respuesta #4 en: 2 Mayo 2011, 22:30 pm »

Gracias por contestar otra vez Acermax. Lo de IArray es una cosa que se me ha colado de otro lado, ya lo he modificado.

A ver, el operador [] lo he hecho así:
int& Vector::operator[](int i)
{
   return data[ i ];
}
Con esto podría acceder en un principio de la forma a[4] por ejemplo.
Luego he implementado aparte un sencillo menu de este estilo:
scanf(&opcion);
while (opcion!=3){
   if (opcion==1) Vector a(sz);   //cogiendo con cin sz y tal
   else if (opcion==2){ cin>>pos; cout<< a[pos];}
   scanf(&opcion);
}
De esa forma cuando le meto un 1 me crearía el vector y con la opción 2 me mostraría el valor de las posición pos. Mi problema es que ahí me pone que a no está definido.
Espero que sea lo que me estabas pidiendo. Gracias otra vez
En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Ayuda con c++
« Respuesta #5 en: 3 Mayo 2011, 02:54 am »

Tal vez no lo esté entendiendo muy bien, pero si tu clase vector lo que usa son unos nuevos indice inferior y superior, no puedes devolver la posicion 'i' directamente, es decir, si tu creas, según tu clase, un vector de la forma: Vector (5,10) es un vector que los indices serían Vector[5], Vector[6],...,Vector[10], aunque internamente tu creas un Vector de la posición 0 a la 5.

Entonces tu operador [] debería ser de la forma

Código:
int& Vector::operator[](int i)
{
   return data[i-indice_min];
}

Y además te decía que para los vectores se usan 2 operadores iguales, que no estoy seguro si el error es por eso, pero implementalo porque es lo correcto. Uno se usa para la lectura del dato, es decir para hacer por ejemplo cout << Vector, y otro para la escritura: cin >> Vector, asi que deberías implementarlo así.

Código:
const int& Vector::operator[](int i) const
{
   return data[i-indice_min];
}

De todas maneras deberías poner el error exactamente que te da, a ver que dice el compilador.
En línea

anon77

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con c++
« Respuesta #6 en: 3 Mayo 2011, 15:53 pm »

El error de compilación me da en el menú, que es el que he puesto antes, en esta línea:
else if (opcion==2){ cin>>pos; cout<< a[pos];<<endl;}
Y el mensaje que me pone exactamente es este:
Error: 'a' was not declared in this scope
En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Ayuda con c++
« Respuesta #7 en: 4 Mayo 2011, 03:38 am »

El vector debes crearlo fuera del IF, es muy probable que el error que dices sea ese, además que no tiene mucho sentido ese while para crear el vector. Crea al vector antes.

Tu problema viene a la hora de que no tienes en cuenta el alcance de las variables, en este caso la variable "a" local. Googleando un poco he encontrado una página que creo que lo dice más o menos clarillo: http://www.modelo.edu.mx/univ/virtech/prograc/cplus2.htm

Un saludo.
« Última modificación: 4 Mayo 2011, 04:30 am por Acermax » En línea

anon77

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con c++
« Respuesta #8 en: 4 Mayo 2011, 23:29 pm »

Solucionado! Era lo que tú decías. Muchas gracias Acermax
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines