[Error] ¿Porqué no compila este simple programa?

Iniciado por Zodiak98, 16 Junio 2013, 16:21 PM

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

Zodiak98

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:

Código (cpp) [Seleccionar]

//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;
}


Código (cpp) [Seleccionar]

//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


Código (cpp) [Seleccionar]

//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?

0xDani

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 (cpp) [Seleccionar]
//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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Zodiak98

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.

aguml

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.

edr89

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().

amchacon

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í:

Código (cpp) [Seleccionar]
//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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar