Error en la definición de una función

Iniciado por iramonf, 17 Abril 2016, 18:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

iramonf

  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?






Gunhack

CREO estas colocando mal la librería, no es "<complex.h>" solamente es "<complex>"  ;D

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

iramonf

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!

ivancea96

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.

iramonf

 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.




DanFire

Cita de: iramonf en 19 Abril 2016, 10:36 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 (cpp) [Seleccionar]
#include <complex.h>

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

int main(){


return 0;
}

iramonf

Cita de: ivancea96 en 18 Abril 2016, 14:44 PM
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




MAFUS

Pásate por la página que te ha dado Gunhack. En ella te explican como usar esa clase.

HardForo

#8
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:


#include <stdio.h>    
#include <complex.h>  

int main(void)
{
   double complex z1 = 1.0 + 3.0 * I;
   double complex z2 = 1.0 - 4.0 * I;

   printf("Z1 = %.2f + %.2fi\nZ2 = %.2f %+.2fi\n\n",
          creal(z1),
          cimag(z1),
          creal(z2),
          cimag(z2));

   double complex sum = z1 + z2;
   printf("Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));
}



Código (cpp) [Seleccionar]

#include <stdio.h>    
#include <complex>    
using namespace std;

int main(void)
{
// definiciones
typedef complex<double> cpx;
cpx i = cpx (0.0, 1.0); // defino la parte imaginaria

cpx z1,z2,z3,sum;

   z1 = 1.0 + 3.0 * i;
   z2 = 1.0 - 4.0 * i;
   
   printf("Z1 = %.2f + %.2fi\nZ2 = %.2f %+.2fi\n\n",
          real(z1),
          imag(z1),
          real(z2),
          imag(z2));

   sum = z1 + z2;
   printf("Z1 + Z2 = %.2f %+.2fi\n", real(sum), imag(sum));
}


Hay unas cuantas diferencias como podras ver y la version en C++ no te compilará en C (con gcc) ni viceversa
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

iramonf

 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