Autor
|
Tema: Ayuda con c++ (Leído 2,213 veces)
|
anon77
Desconectado
Mensajes: 5
|
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
Mensajes: 55
|
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
Mensajes: 5
|
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
Mensajes: 55
|
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. 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
Mensajes: 5
|
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
Mensajes: 55
|
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 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í.
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
Mensajes: 5
|
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
Mensajes: 55
|
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.htmUn saludo.
|
|
« Última modificación: 4 Mayo 2011, 04:30 am por Acermax »
|
En línea
|
|
|
|
anon77
Desconectado
Mensajes: 5
|
Solucionado! Era lo que tú decías. Muchas gracias Acermax
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Amigos necesito ayuda con un background para un logo de una web ayuda.
Diseño Gráfico
|
™Carlos.®
|
2
|
3,457
|
14 Agosto 2004, 00:23 am
por ™Carlos.®
|
|
|
[Ayuda] Necesito ayuda para crear un buen video uso AF y Flash.
Diseño Gráfico
|
XXXXXX
|
1
|
5,540
|
11 Noviembre 2009, 00:17 am
por Sub_Cero
|
|
|
Ayuda por davor ayuda os ruego ayuda XD (SOLUCIONADO)
Hardware
|
XxRekcahlExX
|
6
|
10,633
|
24 Mayo 2010, 00:56 am
por Aprendiz-Oscuro
|
|
|
AYUDA -.- ahora no entro más en 4chan (tengo una duda, ayuda por favor)
Foro Libre
|
Draklit
|
6
|
8,834
|
15 Octubre 2010, 03:14 am
por Draklit
|
|
|
sist lince indumentaria ayuda ayuda!!!!!!!!!! problemon que hice en le trabajo
Software
|
paola03
|
1
|
4,974
|
11 Marzo 2011, 01:09 am
por charola42
|
|