Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 16 Junio 2013, 16:21 pm



Título: [Error] ¿Porqué no compila este simple programa?
Publicado por: Zodiak98 en 16 Junio 2013, 16:21 pm
Hola amigos, bueno este tema lo hago porqué me puse a practicar con los archivos de cabecera, pero tengo un error al compilar me sale estos 2 errores:

Código:
undefined reference to `suma(int, int)'
undefined reference to `resta(int, int)'

Acá están los archivos con las instrucciones:

Código
  1. //main.cpp
  2.  
  3. #include "operaciones.h"
  4.  
  5. int main()
  6. {
  7.    int resultadoSU = suma(4,5);
  8.    int resultadoRE = resta(12,4);
  9.  
  10.    printf("El resultado de la suma es: %d \n",resultadoSU);
  11.    printf("El resultado de la resta es: %d \n",resultadoRE);
  12.  
  13.    std::cin.get();
  14.  
  15.    return 0;
  16. }
  17.  

Código
  1. //operaciones.h
  2.  
  3. #ifndef OPERACIONES_H_INCLUDED
  4. #define OPERACIONES_H_INCLUDED
  5.  
  6. #include <iostream>
  7. #include <stdio.h>
  8.  
  9. int suma(int x , int y);
  10. int resta(int x , int y);
  11.  
  12.  
  13. #endif
  14.  

Código
  1. //operaciones.cpp
  2.  
  3. #include "operaciones.h"
  4.  
  5. int suma(int x , int y){ return ( x + y ); }
  6.  
  7. int resta(int x , int y){ return ( x - y ); }
  8.  

Qué estoy haciendo mal?


Título: Re: [Error] ¿Porqué no compila este simple programa?
Publicado por: 0xDani en 16 Junio 2013, 16:30 pm
El caso es que el compilador no te incluye automáticamente los archivos de implementación. Puedes probar a dejar el archivo de cabecera así:

Código
  1. //operaciones.h
  2.  
  3. #ifndef OPERACIONES_H_INCLUDED
  4. #define OPERACIONES_H_INCLUDED
  5.  
  6. #include <iostream>
  7. #include <stdio.h>
  8.  
  9. int suma(int x , int y);
  10. int resta(int x , int y);
  11.  
  12. #include "operaciones.cpp" <--- Fijate en esto
  13.  
  14. #endif

Y quitar el include en operaciones.cpp.

Otra opción sería crear una biblioteca estática o dinámica.

Saludos.


Título: Re: [Error] ¿Porqué no compila este simple programa?
Publicado por: Zodiak98 en 16 Junio 2013, 16:44 pm
Hehe gracias me funciono. Pero he visto varios vídeos que no incluyen el archivo de implementación al final de la cabecera, y ellos utilizan Code::Blocks, que es el qué yo utilizo.


Título: Re: [Error] ¿Porqué no compila este simple programa?
Publicado por: aguml en 16 Junio 2013, 16:49 pm
A mi asi me funciona perfectamente:

Código
  1. #include "operaciones.h"
  2.  
  3. int main(int argc, char* argv[])
  4. {
  5.        int resultadoSU = suma(4,5);
  6.        int resultadoRE = resta(12,4);
  7.  
  8.        printf("El resultado de la suma es: %d \n",resultadoSU);
  9.        printf("El resultado de la resta es: %d \n",resultadoRE);
  10.  
  11.        getchar();
  12.  
  13.        return 0;
  14. }

Código
  1. //operaciones.c
  2.  
  3. #include "operaciones.h"
  4.  
  5. int suma(int x, int y){ return ( x + y ); }
  6.  
  7. int resta(int x, int y){ return ( x - y ); }

Código
  1. //operaciones.h
  2. #ifndef operacionesH
  3. #define operacionesH
  4. #include <stdio.h>
  5.  
  6. int suma(int x , int y);
  7. int resta(int x , int y);
  8. #endif

El problema es que usas una mezcla entre C y C++ mezclando archivos de C con archivos de C++. Si usas un .cpp tienes que usar un .hpp o al menos indicarlo como bien te idica el amigo o si no usa un solo tipo y no tendras problemas. Otra cosa ¿incluir iostream solo para una pausa? con lo bien que funciona getc o getchar y ya estan en stdio.h jejeje.


Título: Re: [Error] ¿Porqué no compila este simple programa?
Publicado por: edr89 en 22 Junio 2013, 23:54 pm
Otra cosa ¿incluir iostream solo para una pausa? con lo bien que funciona getc o getchar y ya estan en stdio.h jejeje.

getch() hace pausas y no muestra caracteres, tampoco necesita parametros, me gusta.

Hola amigos, bueno este tema lo hago porqué me puse a practicar con los archivos de cabecera, pero tengo un error al compilar me sale estos 2 errores
tengo un archivo de cabecera para un codigo y trate de incluir toda la informacion del preprocesador ahi, en este caso los prototipos de tus funciones basta que esten en el archivo.h y lo incluyas en tu codigo o las declares directamente antes de main().


Título: Re: [Error] ¿Porqué no compila este simple programa?
Publicado por: amchacon en 23 Junio 2013, 00:28 am
El caso es que el compilador no te incluye automáticamente los archivos de implementación. Puedes probar a dejar el archivo de cabecera así:

Código
  1. //operaciones.h
  2.  
  3. #ifndef OPERACIONES_H_INCLUDED
  4. #define OPERACIONES_H_INCLUDED
  5.  
  6. #include <iostream>
  7. #include <stdio.h>
  8.  
  9. int suma(int x , int y);
  10. int resta(int x , int y);
  11.  
  12. #include "operaciones.cpp" <--- Fijate en esto
  13.  
  14. #endif

Y quitar el include en operaciones.cpp.

Otra opción sería crear una biblioteca estática o dinámica.

Saludos.
Joe Dani, no recomiendes esas chapuzas xDDDD

Lo de la biblioteca estática es mejor. Para ello tienes que añadir el archivo .cpp en tu IDE.