Pues eso, haciendo un programa de movimiento de particula, decidi pasarlo todo a vectores, ya que hasta ahora la posicion y velocidad lo controlaba por variables independeintes.
Lo que pasa es que dentro de la Class, en private, al crear un vetor,me da un error, que leugo al intentar usarlo deriva a otros de sobrecarga que no logro entender.
class Particula { private: vector<float> posicio(); vector<float> v(); //float x, y, vx, vy float a, g, r, phi, w; int px, py, A; bool acceleracio, gravetat, movimentcircular, movimentharmonic; public: Particula(); void entrada(); void moviment(); void imprimir(); bool activat( int i ); float velocitat( int i ); };
Este es el codigo. En si, en vez de vector posicion, tenia 2 floats con x e y. Y en vez del vector v tenia 2 floats con vx y vy.
Al compilar me da este error
particula.cc:147: error: expected identifier before numeric constant particula.cc:147: error: expected ‘,’ or ‘...’ before numeric constant particula.cc:148: error: expected identifier before numeric constant particula.cc:148: error: expected ‘,’ or ‘...’ before numeric constant
Las lineas 147 y 148 corresponden a la declaracion del vector posicio y v respectivamente. Si no asigno un tamaño a los vectores al crearlos, no me da ese error, pero igualmente, mas adelante me sigue saliendo el error de sobrecarga lo ponga o no:
particula.cc:173: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript particula.cc:174: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript particula.cc:177: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript particula.cc:177: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript
Que correspondria en estas lineas por ejemplo
173 posicio[0] = ( PANTALLA_AMPLADA - particula->w )/2; 174 posicio[1] = ( PANTALLA_ALTURA - particula->h )/2; 175 176 //velcoitat 177 v[0] = v[1] = 0;
Si en vez de usar los vectores uso los float, no me da error, por lo tanto es cosa del vector, pero no logro arreglarlo. Alguna idea de porqué pasa eso?
Gracias!.
He intenado ir pasando el
He intenado ir pasando el código a vectores estáticos, pero tengo cierto problema que con la libreria vector no me pasaba.
El problema es queno puedo devolver un vector estático en una funcion. He buscado información y he leido que al declarar la funciona, hay que poner :
funcion nombre (parametros)[ ] {
}
Pero aun y así me da este error
vector.cc:20: error: ‘DistanciaVectors’ declared as function returning an array
La verdad, no se que tan malo era usar los vectores con la clase vector respecto a los estáticos, pero por los problemas que me da quizas no me valga la pena.A ver si te consigo ayudar
funcion nombre (parametros)[ ] {
}
Eso es C? No lo había visto nunca.
No puedes devolver un vector estático (aunque sí dinámico), porque daría error. Lo que tienes que hacer es pasar como parámetro el vector. Por ejemplo, si es una función que inicializa el vector a 0:
No es que esté mal utilizar la clase vector, pero si los vectores son siempre de 2 elementos, es matar moscas a cañonazos.
De hecho, mejor todavía. Si solo quieres el vector para almacenar coordenadas (x,y) créate un struct:
Ya que un struct si se puede devolver, pasar como parámetro etc. De esta forma puedes hacer cosas como:
Es una solución mucho más elegante incluso que la de los vectores estáticos. Y si quieres la mejor solución, indiscutiblemente, si te manejas con las clases, créate una clase Pos, que además de tener los miembros x e y, tengan funciones para calcular el módulo, el ángulo, para rotar la coordenada, y todo lo que se te ocurra.
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
Perfecto! Creo que esta es la
Perfecto! Creo que esta es la mejor solución. Y más que una estructura de "Posicion" Haré ya una estructura propia para manejar yo mismo los vectores en si, para usar la misma estructura en la posición, velocidad, fuerza etc.
Si puedo hacer esto de los vectores en clases, pues mejor aun, aunque probaré con las struct y luego iré avanzando.
Yo hice una librería en Java
Yo hice una librería en Java para Android y funciona a la perfección, pero en vez de usar vectores al inicializar la partícula le doy ángulo aleatorio y almaceno el sinus y el cosinus de dicho ángulo es una variable y así posteriormente incrementarlo en las coordenadas, si quieres te paso el código.
EDITO: Aquí dejo el código por si a alguien le sirve...:http://pastebin.com/hbtn9Wq1
Es
Es C++?
Sí
Sí
jajaja
Pues aun me queda :D
Es un fallo tonto.
Has declarado los vectores con paréntesis, como si fuese una función:
Tendrías que declararlo como
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
Eso
Eso mismo iba a decir, pues esta semana nos han explicado matrices y vectores y al menos hasta donde yo sé:
Ups no esperad, el codigo
Ups no esperad, el codigo està mal, copie lo que no era. Dónde se ve entre paréntesis, va un 2, para darle tamaño 2. Con eso me da los errores.
Peeeeroo
Si quieres que el vector tenga siempre longitud 2, por qué no haces simplemente:
Que es más sencillo y eficiente????
La clase vector se suele usar cuando no sabes el tamaño que tendrá el vector, o el tamaño va variando en el programa. En tu caso creo que no tiene sentido si siempre va a ser 2.
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
Vaya, es que yo con cosas así
Vaya, es que yo con cosas así nunca he trabajado, cuando hice un cursillo, usamos bastante los vectores, y entonces pues ya lo usaba aqui xD. Voy a probar como tu dices.
En serio?
Me sorprende muchísimo que hayas dado funciones hasta clases y no hayas dado los vectores estáticos, cuando los vectores estáticos son de lo más simple xD. Lo normal es dar los vectores estáticos mucho antes que la clase "vector" incluso.
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
No se, fue un curso intensivo
No se, fue un curso intensivo de 5 días, de 8 a 16:00. Hicimos cosas como ejercicios de vectores, ordenacion y demás. También con matrices y demás. Los vectores estaticos estos sólo los he visto con los char[] .
Las clases las vi yo para hacer un programa con particulas
Voy adaptando el código y mas o menos me salgo.