Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No me compila el main (undefined reference to...)

Estas en el tema de No me compila el main (undefined reference to...) en el foro de C/C++ en Foros del Web. Buenas, tengo el siguiente programa con los siguientes ficheros: ParDe.h #include <iostream> using namespace std; #ifndef _ParDe #define _ParDe template <class T> class ParDe { ...
  #1 (permalink)  
Antiguo 06/11/2007, 13:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 4
Antigüedad: 16 años, 6 meses
Puntos: 0
No me compila el main (undefined reference to...)

Buenas, tengo el siguiente programa con los siguientes ficheros:

ParDe.h

#include <iostream>
using namespace std;

#ifndef _ParDe
#define _ParDe

template <class T>
class ParDe {

protected:
T x; /** Coordenada x del punto */
T y; /** Coordenada y del punto */

public:
/**
* @brief Construye el par (0,0).
* @param _x Valor de la coordenada x del par a crear.
* @param _y Valor de la coordenada y del par a crear.
*/
ParDe (T _x=0, T _y=0);
};

#endif

ParDe.cpp

#include <ParDe.h>
#include <iostream>
using namespace std;

template <class T>
ParDe<T> :: ParDe (T _x, T _y): x(_x), y(_y) {cout << "Constructor" << endl;}

main.cpp

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

using namespace std;

int main () {

ParDe <double> p1;

return 0;
}


Al compilar el main, me da el siguiente fallo:

main.o:main.cpp:(.text+0x13d): undefined reference to 'ParDe(double)::ParDe(double,double)'


¿Alguien sabe el motivo del fallo?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 06/11/2007, 14:28
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: No me compila el main (undefined reference to...)

El programa es correcto.

¿Estás seguro de que no estás tratando de linkar al compilar main.cpp por separado?
  #3 (permalink)  
Antiguo 06/11/2007, 15:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 4
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: No me compila el main (undefined reference to...)

INCLUDES= ./

defecto:
@echo "make binario -> Crea el ejecutable. make clean -> Borra ficheros basura"

binario: tdaparde ppal
g++ -omain.bin ParDe.o main.o
doxywizard

tdaparde:
g++ -c -oParDe.o ParDe.cpp -I ${INCLUDES}

ppal:
g++ -c -omain.o main.cpp -I ${INCLUDES}

clean:
rm -f -r *~
rm -f -r *.o

Ahi está el makefile, a ver si puedes encontrarme el error.

Gracias ;)
  #4 (permalink)  
Antiguo 06/11/2007, 17:42
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: No me compila el main (undefined reference to...)

Ah, ya veo, que tratabas de separar la definición de la implementación, como con las clases normales.

No puedes, debes ponerlo todo en el .h

Tal cual lo haces ahora, al compilar el ParDe.cpp, g++ no ve ningún uso del método y no genera ninguna especialización; y después el linker no la encuentra.
  #5 (permalink)  
Antiguo 04/11/2009, 11:46
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: No me compila el main (undefined reference to...)

Este error también se produce cuando estás importando otro archivo .c (con el include .h) que tiene otro main, en ese caso el compilador no sabe cuál es el verdadero main.

La solución sería quitar en uno de ellos el main y compilarlos juntos de la siguiente forma:

Código:
gcc archivo1.c archivo2.c -o miprograma.o
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:59.