Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Lorena09 en 15 Febrero 2021, 05:30 AM

Título: Ayuda porfavor! a function-definition is not allowed here
Publicado por: Lorena09 en 15 Febrero 2021, 05:30 AM
Hola! La verdad me da un poco de pena preguntar, sé que es algo muy básico, pero apenas entré a la universidad y voy empzando.
Les voy a mostrar mi código, me muestra un error que dice "a function-definition is not allowed here '{'token"
ya comparé con los que nos entrego el profesor y he revisado algunos libros, pero no encuentro mi error, ojala alguien pueda ayudarme  :(

Código (cpp) [Seleccionar]

#include<iostream>
#include<stdio.h>
using namespace std;
main()
{
int result;
result=0;
int product(int a,int b)
{
for(i=1;i<=min(a,b);i++)
{
result=result+max(a,b);
}
}
cout<<product(5,5);
}




MOD: El código debe estar entre etiquetas de Código GeSHi
Título: Re: Ayuda porfavor! a function-definition is not allowed here
Publicado por: K-YreX en 15 Febrero 2021, 05:57 AM
Antes de nada, el código debe publicarse entre etiquetas de Código GeSHi para facilitar su lectura. Puedes seleccionar las etiquetas mediante el deplegable que dice "Código GeSHi", encima del cuadro de texto o escribiendo manualmente:
[code=cpp]
Aquí escribes tu código
[/code]


Todos tuvimos nuestros inicios y todos nos hemos hecho preguntas y hemos tenido problemas con cosas que luego se vuelven muy básicas.   :-X

El problema es que estás definiendo una función: product() dentro de otra función: main(). Existe la posibilidad de hacer esto de varias formas pero no es nada recomendable. Lo suyo es definir las funciones fuera de otras funciones.
Además hay 2 formas de hacerlo:
Título: Re: Ayuda porfavor! a function-definition is not allowed here
Publicado por: @XSStringManolo en 15 Febrero 2021, 08:58 AM
Código (cpp) [Seleccionar]
int result;
result=0;


Puedes definir el valor de result en la propia declaración:
int result = 0;

En la primera sentencia del bucle for, se te olvidó declarar el tipo de i:
for(int i = 0; bla bla bla

Puedes usar += para tu asignación a result dentro del bucle:
result+=max(a,b);

Como te comenta el compañero, tienes que hacer return del resultado de la funciones que declares con cualquier tipo que no sea void.

En tu función tendrías que retornar result trás el bucle for. En el código que compartes tienes result declarado antes de la función product, pero nunca lo usas fuera. Debe estár dentro de la función.

Código (cpp) [Seleccionar]
#include <iostream> // input(entrada) output(salida) stream(<< >>) cout es C salida, cin es C entrada

using namespace std; // te ahorra poner std::cout std::cin std::string std::getline ...

// Prototipo de funciones
int min(int, int);
int max(int a, int b); // aconsejable añadirle los nombres de los parametros que vas a usar abajo tambien aqui, para facilitar la comprension del codigo, a pesar de no ser estrictamente necesario.
int product(int, int);


// función principal
int main(int argc, char **argv) { /* deberías declarar así siempre la funcion principal del programa. El primer argumento contiene el número de datos enviados por consola en el caso de correr el programa desde la cmd de Windows o la terminal de Linux.
Por ejemplo en la cmd, miPrograma.exe 5 5
Los argumentos se encuentran en el segundo parametro si lo recorres utilizando argv como tamaño, puedes obtenerlos para utilizarlos en tu programa en lugar de usar cin. Así es como se progaman los comandos de windows y linux.
Te lo comento no porque tenga gran relevancia o sea algo que tengas que saber de memoria ahora mismo, si no para que no te suenen a chino cuando los veas en clase. */

 cout << "El resultado es: " << product(5, 5) << endl;
 cin.get(); // Se suele utilizar para pausar el programa y que no se cierre sin que te de tiempo a ver los resultados.
 return 0;
}



// declaracion de funciones. Al estar debajo de main, tienen que tener su prototipo definido antes de main.

// Se aconseja comentar el código para entenderlo mejor. Ej:
/* Retorna el entero menor de dos enteros */
int min(int num1, int num2) {
 if (num1 < num2) { /* si el primer parametro es menor que el segundo, entonces: */
   return num1; // retorna el primer parametro
 }
 return num2; // retorna el segundo. Una vez se retorna una función, se sale de ella, asique si se retorna num2 es porque no se complio la condicion anterior que retornaba num1
}

/* Esta funcion hace lo mismo que la anterior, pero retorna el mayor en lugar del menor */
int max(int a, int b) {
 if (a > b) {
   return a;
 } else { // En este caso da igual que se añada el else o no. Si en el if anterior hubiese un cout en lugar de un return, entonces si que sería importante el else. Debido a que no se retornaría a, se imprimiría, y sin el else la ejecucion continuaria retornando b despues de imprimir en pantalla a.
   return b;
 }
}


int product(int num1, int num2) {
 int res = 0;
 for(int i = 1; i <= min(num1, num2); ++i) {
   res += max(num1, num2);
 }
 return res;
}



Practica! Haz por ejemplo un programa que imprima en pantalla los números impares situados entre los 2 números que indique el usuario.
Otro al que le pidas al usuario su nombre y su apellido en minúsculas, y le pongas ambas iniciales en mayúsculas.
Un programa que te diga el número de letras y palabras que tiene una frase.
...

Vas practicando con las cosas más sencillas que se te ocurran y según vas mejorando, vas haciendo cosas cada vez más difíciles.

Para la programación te recomiendo 80% práctica y  20% teoría, y no al revés como solemos hacer muchos al inicio. Cada cosa que leas la tienes que usar 20 veces antes de leer la siguiente. Si no, se te acumulan una cantidad de conceptos en la cabeza que no puedes plasmar. Se te olvidan otras, mezclas varias...