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?
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/)
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!
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.
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.
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...
#include <complex.h>
void funcion(std::complex <double>, std::complex <double>, std::complex <double>, int);
int main(){
return 0;
}
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
Pásate por la página que te ha dado Gunhack. En ella te explican como usar esa clase.
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));
}
#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
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
Tambien estoy aprendiendo pero no sigo ningun libro....... aunque hay libros "de referencia", investiga