[C++] referencia a `funcion1(int, char, float)' sin definir

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

[C++] referencia a `funcion1(int, char, float)' sin definir

Notapor shackra » Dom Sep 08, 2013 11:48 pm

Saludos a todos!

Estoy haciendo el primer ejercicio del capitulo 3 del libro Pensar en C++ de Bruce Eckel, las instrucciones dicen: «Cree un fichero de cabecera (con extensión «.h»). En este fichero, declare un grupo de funciones variando las listas de argumentos y valores de retorno de entre los siguientes: void, char, int y float. Ahora cree un fichero .cpp que incluya su fichero de cabecera y haga definiciones para todas esas funciones. Cada definición simplemente debe imprimir en nombre de la función, la lista de argumentos y el tipo de retorno para que se sepa que ha sido llamada. Cree un segundo fichero .cpp que incluya el fichero de cabecera y defina una int main(), que contenga llamadas a todas sus funciones. Compile y ejecute su programa.»

Y sin embargo obtengo éste error desde g++:

~/coders/desarrollo/practicas/Cpp/pensarenc/ejercicios/capitulo3 $ g++ mainfunc.cpp -o mainfunc
/tmp/cccD5w76.o: En la función `main':
mainfunc.cpp:(.text+0x3a): referencia a `funcion1(int, char, float)' sin definir
mainfunc.cpp:(.text+0x55): referencia a `funcion2(int, char, float)' sin definir
mainfunc.cpp:(.text+0x70): referencia a `funcion3(int, char, float)' sin definir
mainfunc.cpp:(.text+0x8b): referencia a `funcion4(int, char, float)' sin definir
collect2: error: ld devolvió el estado de salida 1
~/coders/desarrollo/practicas/Cpp/pensarenc/ejercicios/capitulo3 $


acá el header:
#ifndef GRUPOFUNC_H
#define GRUPOFUNC_H

void funcion1(int a, char b, float c);
int funcion2(int a, char b, float c);
char funcion3(int a, char b, float c);
float funcion4(int a, char b, float c);

#endif


acá las definiciones de las funciones que están en el header:


#include "grupofunc.h"
#include <iostream>

void funcion1(int a, char b, float c)
{
cout << "nombre de la funcion: funcion1" << endl;
cout << "primer argumento: " << a << endl;
cout << "segundo argumento: " << b << endl;
cout << "tercer argumento: " << c << endl;
return;
}


y acá el archivo fuente principal:
#include "grupofunc.h"

int main(int argc, char *argv[])
{
int a = 10;
char b = 'x';
float c = 0.1337;

funcion1(a, b, c);
funcion2(a, b, c);
funcion3(a, b, c);
funcion4(a, b, c);

return 0;
}


¿Me podrán ayudar? Gracias :D
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: [C++] referencia a `funcion1(int, char, float)' sin defi

Notapor Aborgna » Mar Sep 10, 2013 12:55 am

Raro...

Fijate en grupofunc.cpp, que deberias agregar un std:: antes de cada cout y endl o directamente poner
using namespace std;
al principio.

Pero por lo demás, no le veo error al código, dejo los tres archivos que copié de lo que pusiste y compilé sin problemas.

main.cpp
#include "grupofunc.h"

int main(int argc, char *argv[])
{
int a = 10;
char b = 'x';
float c = 0.1337;

funcion1(a, b, c);
funcion2(a, b, c);
funcion3(a, b, c);
funcion4(a, b, c);

return 0;
}


grupofunc.h
#ifndef GRUPOFUNC_H
#define GRUPOFUNC_H

void funcion1(int a, char b, float c);
int funcion2(int a, char b, float c);
char funcion3(int a, char b, float c);
float funcion4(int a, char b, float c);

#endif


grupofunc.cpp
#include "grupofunc.h"
#include <iostream>

using namespace std;

void funcion1(int a, char b, float c)
{
cout << "nombre de la funcion: funcion1" << endl;
cout << "primer argumento: " << a << endl;
cout << "segundo argumento: " << b << endl;
cout << "tercer argumento: " << c << endl;
return;
}

int funcion2(int a, char b, float c)
{
cout << "nombre de la funcion: funcion2" << endl;
cout << "primer argumento: " << a << endl;
cout << "segundo argumento: " << b << endl;
cout << "tercer argumento: " << c << endl;
return a;
}

char funcion3(int a, char b, float c)
{
cout << "nombre de la funcion: funcion3" << endl;
cout << "primer argumento: " << a << endl;
cout << "segundo argumento: " << b << endl;
cout << "tercer argumento: " << c << endl;
return b;
}

float funcion4(int a, char b, float c)
{
cout << "nombre de la funcion: funcion4" << endl;
cout << "primer argumento: " << a << endl;
cout << "segundo argumento: " << b << endl;
cout << "tercer argumento: " << c << endl;
return c;
}
Avatar de Usuario
Aborgna
 
Mensajes: 11
Registrado: Lun May 23, 2011 4:08 pm
Ubicación: Buenos Aires, Argentina

Re: [C++] referencia a `funcion1(int, char, float)' sin defi

Notapor shackra » Mar Sep 10, 2013 2:36 am

En efecto, tenia que poner using namespace std; para que el compilador entendiera que estaba usando funciones de iostream :D

Gracias!!

Welcome to the Emacs shell

~/coders/desarrollo/practicas/Cpp/pensarenc/ejercicios/capitulo3 $ g++ mainfunc.cpp grupofunc.cpp -o mainfunc
~/coders/desarrollo/practicas/Cpp/pensarenc/ejercicios/capitulo3 $ ./mainfunc
nombre de la funcion: funcion1
primer argumento: 10
segundo argumento: x
tercer argumento: 0.1337
nombre de la funcion: funcion2
primer argumento: 10
segundo argumento: x
tercer argumento: 0.1337
nombre de la funcion: funcion3
primer argumento: 10
segundo argumento: x
tercer argumento: 0.1337
nombre de la funcion: funcion4
primer argumento: 10
segundo argumento: x
tercer argumento: 0.1337
~/coders/desarrollo/practicas/Cpp/pensarenc/ejercicios/capitulo3 $
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado