Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: iramonf en 17 Abril 2016, 18:40 pm



Título: Error en la definición de una función
Publicado por: iramonf en 17 Abril 2016, 18:40 pm
  Buenas

 Estoy trabajando con CodeBlocks y gcc.

Defino una función de 4 variables que no devuelve nada. Tres de las variables son complejas y he utilizado el código:

#include <complex.h>

void funcion(complex <double>, complex <double>, complex <double>, int);

Pero al compilar me da el error:

variable or field  funcion declared void

y

"complex" was not declared in this scope

 No tengo ni idea de qué es lo que está ocurriendo pero he hecho pruebas trabajando con complejos y funcionaba...

 ¿Me puedes ayudar?







Título: Re: Error en la definición de una función
Publicado por: Gunhack en 17 Abril 2016, 21:37 pm
CREO estas colocando mal la librería, no es "<complex.h>" solamente es "<complex>"  ;D

http://www.cplusplus.com/reference/complex/ (http://www.cplusplus.com/reference/complex/)


Título: Re: Error en la definición de una función
Publicado por: iramonf en 18 Abril 2016, 10:48 am
Gracias por tu respuesta a la que, debo reconocer, no di crédito al principio.

Pero sí tenías razón y la prueba se encuentra en:

https://es.wikipedia.org/wiki/Complex.h

Con complex tengo un tipo de errores y con complex.h otro. ¡Un rollo!

Lo que creo que voy a hacer es crear una estructura y así no tendré este tipo de problemas, serán otros....


Repito, ¡gracias!


Título: Re: Error en la definición de una función
Publicado por: ivancea96 en 18 Abril 2016, 14:44 pm
Si utilizas C++, y veo que así es, utiliza <complex>.

Si tienes errores, revisa una cosa: la clase "complex" es del namespace "std". Así que o pones una directiva using, por ejemplo "using namespace std;", o std::complex. No sé si lo estás poniendo, pero solo adelanto por si acaso.

Luego, si tienes más errores, leelos y trata de corregirlos. Sinó, pon los errores y el código implicado.


Título: Re: Error en la definición de una función
Publicado por: iramonf en 19 Abril 2016, 10:36 am
 Gracias a Gunhack y a ivancea96


  He optado por definir una estructura porque tampoco necesito realizar muchas operaciones con números complejos. Básicamente el sacar la parte real, la imaginaria y calcular su módulo.

 Mis conocimientos de C están un tanto oxidados y estoy intentando recuperar unos programillas que hice hace años con Borland sobre fractales y ayer ya empezó la cosa a visualizarse.





Título: Re: Error en la definición de una función
Publicado por: DanFire en 19 Abril 2016, 11:26 am
 He optado por definir una estructura
No seria mas interesante usar una clase?
por cierto, si lo haces asi no da errores...

Código
  1. #include <complex.h>
  2.  
  3. void funcion(std::complex <double>, std::complex <double>, std::complex <double>, int);
  4.  
  5. int main(){
  6.  
  7.  
  8. return 0;
  9. }
  10.  


Título: Re: Error en la definición de una función
Publicado por: iramonf en 21 Abril 2016, 00:13 am
Si utilizas C++, y veo que así es, utiliza <complex>.

Si tienes errores, revisa una cosa: ...

  Te he hecho caso y parece que se va aclarando el panorama pero ahora tengo dos dudas muy elementales pero que creo que pueden ser las últimas:

  ¿Cómo asigno un valor a una variable compleja?

  ¿Cómo extraigo la parte real y la parte imaginaria de una variable compleja?.

  Con Borland lo hacía de una manera que ahora no me funciona y estoy haciendo pruebas y no doy con la solución.

  Gracias





Título: Re: Error en la definición de una función
Publicado por: MAFUS en 21 Abril 2016, 00:30 am
Pásate por la página que te ha dado Gunhack. En ella te explican como usar esa clase.


Título: Re: Error en la definición de una función
Publicado por: HardForo en 21 Abril 2016, 01:14 am
Veo estas mezclando bastante:

Citar
#include <complex.h>

void funcion(complex <double>, complex <double>, complex <double>, int);

Dices que usas GCC asi que te muestro un ejemplo en C pero tambien por si quieres usar C++ el mismo ejemplo traducido:

Código
  1. #include <stdio.h>    
  2. #include <complex.h>  
  3.  
  4. int main(void)
  5. {
  6.    double complex z1 = 1.0 + 3.0 * I;
  7.    double complex z2 = 1.0 - 4.0 * I;
  8.  
  9.    printf("Z1 = %.2f + %.2fi\nZ2 = %.2f %+.2fi\n\n",
  10.           creal(z1),
  11.           cimag(z1),
  12.           creal(z2),
  13.           cimag(z2));
  14.  
  15.    double complex sum = z1 + z2;
  16.    printf("Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));
  17. }
  18.  
  19.  

Código
  1. #include <stdio.h>    
  2. #include <complex>    
  3. using namespace std;
  4.  
  5. int main(void)
  6. {
  7. // definiciones
  8. typedef complex<double> cpx;
  9. cpx i = cpx (0.0, 1.0); // defino la parte imaginaria
  10.  
  11. cpx z1,z2,z3,sum;
  12.  
  13.    z1 = 1.0 + 3.0 * i;
  14.    z2 = 1.0 - 4.0 * i;
  15.  
  16.    printf("Z1 = %.2f + %.2fi\nZ2 = %.2f %+.2fi\n\n",
  17.           real(z1),
  18.           imag(z1),
  19.           real(z2),
  20.           imag(z2));
  21.  
  22.    sum = z1 + z2;
  23.    printf("Z1 + Z2 = %.2f %+.2fi\n", real(sum), imag(sum));
  24. }
  25.  

Hay unas cuantas diferencias como podras ver y la version en C++ no te compilará en C (con gcc) ni viceversa


Título: Re: Error en la definición de una función
Publicado por: iramonf en 21 Abril 2016, 18:07 pm
 Gracias, muy amable.

 En realidad mi única pregunta tendría que ser si me podéis recomendar un libro o un manual para resolver dudas sin necesidad de ser pesado.

 Si programo es por afición pues me lo paso muy bien machacando las neuronas.

Gracias 


Título: Re: Error en la definición de una función
Publicado por: HardForo en 21 Abril 2016, 18:13 pm
Tambien estoy aprendiendo pero no sigo ningun libro....... aunque hay libros "de referencia", investiga