¿Error en cabecera de funciones?

Iniciado por Constantinoplero, 17 Diciembre 2011, 23:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Constantinoplero

Codeblocks me tira un error en la línea 3 tal que:

Citarerror:expected ';', ',' or ')' before '&' token

/*Código para intercambiar dos números*/

#include <stdio.h>

void Intercambiar(int &x, int &y);       //Linea 3

int main()
{

int num1, num2;

printf("Dame un numero: ");
scanf("%d", &num1);

printf("Dame otro numero: ");
scanf("%d", &num2);

Intercambiar (num1, num2);

printf("Los he intercambiado: %d %d", num1, num2);

return 0;

}

void Intercambiar(int &x, int &y)
{

int aux;

aux=x;
x=y;
y=aux;

}


No entiendo para nada porqué me da ese error. Si alguien me ayuda se lo agradecería. Un saludo.
Más que buenos principios prefiero mejores finales.

bdoX

#1
Debes aprende a usar bien punteros en C.


/*Codigo para intercambiar dos números*/

#include <stdio.h>

void Intercambiar(int *x, int *y);
//void Intercambiar(int *, int *);       //tambien puede ser de esta forma

int main ( )
{
   int num1, num2;
   
   printf ( "Dame un numero: " );
   scanf ( "%d", &num1 );
   
   printf ( "Dame otro numero: " );
   scanf ( "%d", &num2 );
   
   Intercambiar (&num1, &num2);
   
   printf ( "Los he intercambiado: %d %d", num1, num2 );
   
   setbuf ( stdin, NULL );
   getchar ( );
   
   return 0;

}

void Intercambiar(int *x, int *y)
{
   int aux;
   
   aux = *x;
   *x = *y;
   *y = aux;
}



Lo que tu muestras es de C++

Constantinoplero

Verdaderamente sigo sin saber porqué, pero ahora funciona.

Mi profesora usa '&' antes de los argumentos que van a volver por referencia, igual que yo en las prácticas que hacemos en la universidad (con Codeblocks también) y sí funciona.

En los apuntes dice que usemos '&'. ¿Cómo es que funciona con '*' y no con '&'?

Saludos y gracias.
Más que buenos principios prefiero mejores finales.

bdoX

#3
C no admite void Intercambiar(int &x, int &y);, C++ si. A eso se le llama referencia, y de esta forma void Intercambiar(int *x, int *y); se le llama desreferencia. Fijate que el archivo sea guardado con *.cpp cuando lo hagas de esta forma void Intercambiar(int &x, int &y);.

Yo uso Dev-c++, si guardo tu programa *.c (Es de C) y compilo tu programa me da ese error, y si lo guardo con *.cpp (Es de c++) no me da error. No conozco todos los IDE's pero como todos saben, Dev-c++ puedo compilar codigo de C y de C++, pero tienes que tener cuidado con la extensión con la que guardas

PD: C++ también admite con *

La idea de la programación es que sea portable tu codigo, y que pueda compilar con cualquier IDE sin ningun problema (No quiero hablar de las plataformas). Si tu compilas un codigo en un IDE y ese IDE te admite cosas como por ejemplo que puedas compilar codigo C con extensión *.cpp despues vas a tener problemas cuando uses otro IDE. No puedes mezclar cosas, o programas en C, o en c++, no en ambos.

Saludos

Constantinoplero

#4
O sea que es porque es C y no C++... En la uni igual se guarda automáticamente en .cpp

¿Sabes porque me arroja este código error en la misma zona?

#include <stdio.h>

bool EsPrimo(char letra);

int main()

{
   int numero;

   printf("Dame un numero: ");
   scanf("%d", &numero);

   if (EsPrimo(numero)==true)
       printf("Es un numero primo");

   else
       printf("No es un numero primo");

   return 0;

}

bool EsPrimo(char letra)
{
   int numero, i, divisor;
   bool v=true;
   i=numero-1;

   do
   {
       divisor=numero%i;
       i--;
   }
   while(i>1 || divisor==0);

   if (divisor==0)
       bool v=false;

   return v;

}




Saludos y de nuevo gracias
Más que buenos principios prefiero mejores finales.

Ferno

Por lo mismo. El tipo de dato "bool" es específico de C++ y no es un tipo de dato del lenguaje C.

Constantinoplero

Me lo suponía, pero es que al intentar cambiar la extensión del archivo a .cpp se me ejecuta pero dice que el programa debe cerrarse inmediatamente y no funciona...

P.D.: He cambiado la librería a cstdio al pasarlo a C++
Más que buenos principios prefiero mejores finales.

Ferno

La variable "letra" no está definida en ningún lado, y la estás utilizando!

Constantinoplero

Perdón, ya lo cambié. Era 'numero' sobre lo que quiero que actúe la función.
Aún así me sigue saliendo el mismo problema... Se ejecuta, me pide el número, y dice que debe cerrarse.
Más que buenos principios prefiero mejores finales.

Ferno

¿En la función EsPrimo también lo cambiaste?
Fijate que le estás pasando algo por parámetro y no lo estás usando, además, declaraste otra variable "número" en dicha función, la cual NO estás inicializando y la estás utilizando para inicializar la variable "i".
Si esa variable número es la que pediste en la función main, no debes declararla nuevamente en la función EsPrimo, y debes pasarlo como parámetro.