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:
undefined reference to `suma(int, int)'
undefined reference to `resta(int, int)'
Acá están los archivos con las instrucciones:
//main.cpp
#include "operaciones.h"
int main()
{
int resultadoSU = suma(4,5);
int resultadoRE = resta(12,4);
printf("El resultado de la suma es: %d \n",resultadoSU);
printf("El resultado de la resta es: %d \n",resultadoRE);
std::cin.get();
return 0;
}
//operaciones.h
#ifndef OPERACIONES_H_INCLUDED
#define OPERACIONES_H_INCLUDED
#include <iostream>
#include <stdio.h>
int suma(int x , int y);
int resta(int x , int y);
#endif
//operaciones.cpp
#include "operaciones.h"
int suma(int x , int y){ return ( x + y ); }
int resta(int x , int y){ return ( x - y ); }
Qué estoy haciendo mal?
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í:
//operaciones.h
#ifndef OPERACIONES_H_INCLUDED
#define OPERACIONES_H_INCLUDED
#include <iostream>
#include <stdio.h>
int suma(int x , int y);
int resta(int x , int y);
#include "operaciones.cpp" <--- Fijate en esto
#endif
Y quitar el include en operaciones.cpp.
Otra opción sería crear una biblioteca estática o dinámica.
Saludos.
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.
A mi asi me funciona perfectamente:
#include "operaciones.h"
int main(int argc, char* argv[])
{
int resultadoSU = suma(4,5);
int resultadoRE = resta(12,4);
printf("El resultado de la suma es: %d \n",resultadoSU);
printf("El resultado de la resta es: %d \n",resultadoRE);
getchar();
return 0;
}
//operaciones.c
#include "operaciones.h"
int suma(int x, int y){ return ( x + y ); }
int resta(int x, int y){ return ( x - y ); }
//operaciones.h
#ifndef operacionesH
#define operacionesH
#include <stdio.h>
int suma(int x , int y);
int resta(int x , int y);
#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.
Cita de: aguml en 16 Junio 2013, 16:49 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.
Cita de: 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
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().
Cita de: 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í:
//operaciones.h
#ifndef OPERACIONES_H_INCLUDED
#define OPERACIONES_H_INCLUDED
#include <iostream>
#include <stdio.h>
int suma(int x , int y);
int resta(int x , int y);
#include "operaciones.cpp" <--- Fijate en esto
#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.