2

He troceado un programa moyenne.cpp que hace la media de un vector de calificaciónes c++ en tres : main.cpp, moyenne.cpp y moyenne.h.

Ya funciona el fichero solo, pero hoy me dice el programa cuando hizo g++ main.cpp -o main que :

In function `main':
main.cpp:(.text+0x196): undefined reference to `moyenne(std::vector<double, std::allocator<double> > const&)'

Sin embargo utiliso en main.cpp

#ifndef MOYENNE_H_INCLUDED
#define MOYENNE_H_INCLUDED

#include<vector>

double moyenne(std::vector<double>const& tableau);

y lo mismo "includes" en moyenne.cpp.

actualización

Cuando hizo g++ moyenne.cpp -o moyenne tengo un error similar :

$ g++ moyenne.cpp -o moyenne
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

Entonces no entiendo donde esta esta undefined reference ...

Revolucion for Monica
  • 4,154
  • 4
  • 28
  • 80
  • ¿ Orden exacta que usas para generar el ejecutable ? – Trauma Apr 13 '17 at 13:29
  • `undefined reference` es que no encuentra el **cuerpo** de la función `moyenne`, te falta compilar o añadir a tu proyecto el archivo `moneye.cpp`. – PaperBirdMaster Apr 13 '17 at 13:42
  • estaba por editar el titulo, para cambiar `programo` por `programa` pero vi que usted emplea ese termino varia veces en la pregunta, asi que no se si, usted llama a programa, por programo, quizas fue un error o es que asi tambien se acostumbra a escribir. Saludos – Angel Angel Apr 13 '17 at 15:46
  • @AngelAngel es que Marine1 es francés; poco a poco, va mejorando su español. No seas muy severo :-) – Trauma Apr 13 '17 at 16:42
  • 1
    @Trauma mi intencion no fue el ser severo, todo lo contrario, le comente por si tenia que cambiarlo y no hacerlo yo directamente pues no sabia si en algun pais, quizas se decia asi, quien sabe, y si fue un error como comentas que es frances, seguro que asi aprende mas rapido, si lo modifica el OP, por otro lado, es posible que escriba español mejor que yo. Saludos – Angel Angel Apr 13 '17 at 18:17
  • @Trauma Cualquier sea el orden siempre me da este tipo de error : `undefined reference to...` – Revolucion for Monica Apr 15 '17 at 08:57
  • Puede que [esta guía](https://es.stackoverflow.com/questions/65557/simbolo-externo-sin-resolver-qu%c3%a9-he-hecho-mal) te ayude a entender el problema. – PaperBirdMaster Apr 26 '17 at 10:25

1 Answers1

0

Tienes 2 archivos fuente, así que has de usar opciones distintas para generar el ejecutable:

g++ -c moyenne.cpp -o moyenne

Observa el -c. Con esto, le decimos al compilador que no es un ejecutable final, sino un archivo objeto.

Para generar el ejecutable final, después de la orden anterior, hacemos

g++ -o test main.c moyenne.o

Al usar varios archivos, cada uno de ellos es un objeto independiente, pero, si no se lo indicamos, el compilador buscará main( ) en cualquier archivo fuente que le digamos.

Además, cada archivo objeto no tiene conocimiento real de lo que hay en otros. Eso es una operación aparte de compilar, llamada enlazado (link). Es durante este enlazado que se buscan las referencias a las funciones, y se establecen los punteros adecuados.