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

Ligadura dinámica

Estas en el tema de Ligadura dinámica en el foro de C/C++ en Foros del Web. Hola, estoy haciendo una práctica de ligadura dinámica de la universidad. Al compilar me suelta el siguiente error: Código: Undefined symbols: "AvionPasajeros::~AvionPasajeros()", referenced from: _main ...
  #1 (permalink)  
Antiguo 31/08/2010, 11:49
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 13 años, 8 meses
Puntos: 0
Ligadura dinámica

Hola, estoy haciendo una práctica de ligadura dinámica de la universidad.
Al compilar me suelta el siguiente error:


Código:
Undefined symbols:
  "AvionPasajeros::~AvionPasajeros()", referenced from:
      _main in test10.o
      _main in test10.o
      _main in test10.o
  "vtable for AvionPasajeros", referenced from:
      AvionPasajeros::AvionPasajeros(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Coordenadas, float, int)in test10.o
  "vtable for Avion", referenced from:
      Avion::Avion() in colaaviones.o
      Avion::Avion(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Coordenadas)in test10.o
  "Avion::~Avion()", referenced from:
      ColaAviones::Nodo::~Nodo() in colaaviones.o
  "Avion::CalcularCombustible()", referenced from:
      ColaAviones::CombustibleTotal()       in colaaviones.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Viendo el mensaje de error parece que el problema está en los constructores y destructores, pero no logro resolverlo.

Aquí os pongo las clases:

Código:
class Angulo{
	public:
		Angulo(int g=0, int m=0, int s=0, char o='0'):grados(g), minutos(m), segundos(s), orientacion(o){}
		void MostrarAngulo() const;
	private:
		int grados, minutos, segundos;
		char orientacion;
};
class Coordenadas{
	public:
		Coordenadas():latitud(Angulo()), longitud(Angulo()){}
		Coordenadas(const Angulo l, const Angulo lo):latitud(l), longitud(lo){}
		void MostrarCoordenadas() const;
	private:
		Angulo latitud, longitud;
};
class Avion{
	public:
		Avion(){ }
		Avion(const string ide, const Coordenadas dest):identificador(ide), destino(dest){}
		virtual ~Avion();
		virtual void MostrarAvion() const;
		virtual float CalcularCombustible();
	protected:
		string identificador;
		Coordenadas destino;
};
class AvionAntiincendios: public Avion{
	public:
		AvionAntiincendios(){ }
		AvionAntiincendios(const string ident, const Coordenadas dest, const float l)
			:Avion(ident, dest), litros(l){}
		~AvionAntiincendios();
		void MostrarAvion() const;
		float CalcularCombustible() const;
	private:
		float litros;
};
class AvionPasajeros: public Avion{
	public:
		AvionPasajeros(){ }
		AvionPasajeros(const string ident, const Coordenadas dest, const float equip, const int dur)
			:Avion(ident, dest), equipaje(equip), duracion(dur){}
		~AvionPasajeros();
		void MostrarAvion() const;
		float CalcularCombustible() const;

	private:
		float equipaje;
		int duracion;
};
class ColaAviones{
	private:
		struct Nodo{
			Avion avion;
			Nodo *sig;
		};
		typedef Nodo* PunteroNodo;
		
		PunteroNodo inicio;
		int tam;
	
	public:
		ColaAviones():inicio(NULL), tam(0){}
		ColaAviones(const PunteroNodo &ini, const int tamano):inicio(ini), tam(tamano){}
		~ColaAviones();
			
		void InsertarAvion(Avion &avion);
		void DespegarSiguienteAvion();
		void MostrarSiguienteAvion();
		void EliminarSiguienteAvion();
		void MostrarTodosAviones() const;
		float CombustibleTotal();
};
¿alguien puede ayudarme?

Última edición por paql; 31/08/2010 a las 12:10
  #2 (permalink)  
Antiguo 02/09/2010, 12:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 60
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Ligadura dinámica

El error lo que dice es que no encuentra dichos símbolos para el linkado...
¿Dónde está definido, por ejemplo "AvionPasajeros::~AvionPasajeros()"?
Por si acaso, comentar que no se pueden declarar destructore virtuale puros. Necesitas definirlo aunque sea con un cuerpo vacío.
A ver si hay suerte :)

Etiquetas: dinamica, herencia, ligadura, virtual
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




La zona horaria es GMT -6. Ahora son las 12:45.