elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con funcion sin tipo en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con funcion sin tipo en C  (Leído 13,469 veces)
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Problema con funcion sin tipo en C
« en: 29 Junio 2012, 14:47 pm »

Buenas, resulta de que uso linux mejor dicho ubuntu, tengo que hacer un practico de programación en c, todos usan dev-c++ pero yo nano y gcc para compilar, muestro el codigo para poder decir cual es el error:

Código:
#include <stdio.h>
#include <stdlib.h>

void opera(int n1, int m1, float &raiz1, int &potencia1);

main()
{
        int n,m,potencia;
        float raiz;
        printf("Ingresar un valor para n: ");
        scanf("%d",&n);
        printf("\nIngrese un valor para m: ");
        scanf("%d",&m);
        opera(n,m,raiz,potencia);
        printf("\nLa raiz de n es: %.2f",raiz);
        printf("\nLa potencia de n elevado a la m es: %d\n",potencia);
        return 0;
}
void opera(int n1, int m1, int &raiz1, float &potencia1)
{
        raiz1 = 0;
        potencia1 = 0;
        raiz1 = sqrt(n1);
        potencia1 = pow(n1,m1);
}


El error que me da gcc es que se esperaba ';' o ',' before '&' .
No entiendo ya que asi como esta en dev-c++ lo toma, compila bien. Yo pense que podia ser porque talvez tiene demasiados argumentos la funcion pero no creo, desde ya gracias por su ayuda.


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #1 en: 29 Junio 2012, 16:14 pm »

La verdad no llego a comprender que quiere decir  el ampersand delante de la raiz1 , o potencia1 , se supone que éstos deberían ser punteros , apuntando a una dirección de memoria, yo tengo como IDE Codeblocks 10.05 y como compilador gcc , ahí tienes el código , a mí me funciona.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h> //Te faltaba este header para la funcion pow y sqrt
  4.  
  5. void opera(int n1, int m1, float *raiz1, int *potencia1); // He cambiado los ampersands por * , son variables puntero...
  6.  
  7. int main()
  8. {
  9.        int n,m,potencia;
  10.        float raiz;
  11.        printf("Ingresar un valor para n: ");
  12.        scanf("%d",&n);
  13.        printf("\nIngrese un valor para m: ");
  14.        scanf("%d",&m);
  15.        opera(n,m,&raiz,&potencia); //Le paso la direccion de memoria de las variables raiz y potencia, y las reciben las variables puntero de la funci&#243;n.
  16.        printf("\nLa raiz de n es: %.2f",raiz);
  17.        printf("\nLa potencia de n elevado a la m es: %d\n",potencia);
  18.        return 0;
  19. }
  20. void opera(int n1, int m1, float *raiz1, int *potencia1)
  21. {
  22.        *raiz1 = 0;         //Utilizo el operador de desreferencia para asignar los valores a la direcci&#243;n de memoria del puntero.
  23.        *potencia1 = 0;
  24.        *raiz1 = sqrt(n1);
  25.        *potencia1 = pow(n1,m1);
  26. }
  27.  
Una función en C puede tomar muchísimos argumentos por eso no era, pero la verdad el ampersand se que es para extraer el valor de memoria de la variable pero es que esa variable no apunta a nada! O eso creo que me abran los ojos si no lo veo...
¡Un saludo!


« Última modificación: 29 Junio 2012, 16:19 pm por avesudra » En línea

Regístrate en
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #2 en: 29 Junio 2012, 16:48 pm »

Gracias por responder amigo, resulta que en el prototipo de la función opera los & pasan valores por referencia, eso es lo que me dijeron en la escuela, por eso lo declaro en el prototipo de la función y en la declaración, y también la modifico con el 1 al final, para diferenciarla, osea &raiz1 pasa el valor a raiz y &potencia1 pasa el valor a potencia, igual como vos me lo planteas me da conflicto en la llamada a la función, es decir se soluciona con los apuntadores pero ahora en la llamada me dice "tipos en conflicto para opera", "la declaración de opera estaba aquí".
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #3 en: 29 Junio 2012, 17:39 pm »

Bueno te creo porque yo todavia no he llegado a la facultad y tu si, faltan unos añitos aún  :( , pues no sé la verdad , lo único que te puedo decir es que pruebes a bajarte codeblocks , no tienes que configurar nada incluso el solo te autodetecta el gcc ...

PD: Si sí es así como dices // Nunca me gustó el terminal es muy cutre , prefiero valorar las herramientas que desarrollan otros con todo su interés y paciencia, además  si hay algo mas fácil¿porque no utilizarlo? y gratis!!, si lo que quieres es cojer experiencia con la consola , con ubuntu ya lo haces , no solo compilando :)
« Última modificación: 29 Junio 2012, 17:41 pm por avesudra » En línea

Regístrate en
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #4 en: 29 Junio 2012, 17:57 pm »

¡Buenas!

Si estas trabajando con C no puedes utilizar & para realizar llamadas por referencia. En C no existen las referencias propiamente dichas, eso es cosa de C++. Tendras que utilizar punteros para simular referencias. Por lo tanto, tanto en el prototipo como en la definicion de la funcion, tendras que utilizar punteros en la lista de parametros, y en la llamada a la funcion tendras que pasar la direccion de la variable (&).

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #5 en: 29 Junio 2012, 18:03 pm »

En el código que le he puesto yo le sigue dando errores do-while , pero por lo visto el error que le da es el típico "tipos en conflicto para opera", "la declaración de opera estaba aquí".Como si hubiese definido antes la función.
En línea

Regístrate en
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #6 en: 29 Junio 2012, 18:13 pm »

Gracias por responder, lo del editor nose, me gusta la pantalla negra, es todo, nano es mi amigo, pero volviendo al problema entiendo lo que me dicen con lo del los apuntadores, ahora todos en la facultad lo hacen con el dev-c++, y les funciona como yo lo tenia, posteo lo que tengo y les muestro el error:
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. void opera(int n1, int m1, float *raiz1, int *potencia1);
  5.  
  6. main()
  7. {
  8.        int n,m,potencia;
  9.        float raiz;
  10.        printf("Ingresar un valor para n: ");
  11.        scanf("%d",&n);
  12.        printf("\nIngrese un valor para m: ");
  13.        scanf("%d",&m);
  14.        opera(n,m,&raiz,&potencia);
  15.        printf("\nLa raiz de n es: %.2f",raiz);
  16.        printf("\nLa potencia de n elevado a la m es: %d\n",potencia);
  17. }
  18. void opera(int n1, int m1, float *raiz1, int *potencia1)
  19. {
  20.        *raiz1 = 0;
  21.        *potencia1 = 0;
  22.        *raiz1 = sqrt(n1);
  23.        *potencia1 = pow(n1,m1);
  24. }
  25.  
  26.  

Este es lo que me sale

Código:
/tmp/cc4qmQWd.o: In function `opera':
ejemplo.c:(.text+0xee): undefined reference to `sqrt'
ejemplo.c:(.text+0x10d): undefined reference to `pow'
collect2: ld devolvió el estado de salida 1
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #7 en: 29 Junio 2012, 18:23 pm »

Claro! A todo el mundo le pueden gustar cosas diferentes  :) , y ¿donde está el error que me dijiste antes the_jocker? el de "tipos en conflicto para opera", "la declaración de opera estaba aquí". Igual es porque tenian un archivo de c++ .cpp en vez de uno de .c  , recuerda que desde c++ se pueden utilizar las librerías de c ... Yo he intentado compilarlo con la consola también y me ha dado los mismos errores que a tí , asi que ya ni idea.

¡Un saludo!

EDITADO : Ya he encontrado la solución , el problema es al linkear , tienes que hacer
Código:
gcc -Wall xxx.c /usr/lib/....../libm.a -o xxx
tienes que encontrar el libm.a y poner su dirección completa en mi Ubuntu 11.10 está en /usr/lib/x86_64-linux-gnu/libm.a
« Última modificación: 29 Junio 2012, 18:33 pm por avesudra » En línea

Regístrate en
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #8 en: 29 Junio 2012, 18:32 pm »

avesudra, genial lo tuyo, yo ni me había percatado de la extensión del archivo, claro, los archivos son cpp, asi compilan perfecto sin ningun problema, pero aqui como es c puro no lo agarra ni en pedo, es decir que el error sigue, me dice que no esta definida sqrt ni pow, pero ahora me di cuenta recian gracias.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con funcion sin tipo en C
« Respuesta #9 en: 29 Junio 2012, 18:37 pm »

¿Te compila ya entonces? ;D
En línea

Regístrate en
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines