Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Error al compilar  (Leído 454 veces)
0 Usuarios y 1 Visitante están viendo este tema.
freedman
Wizard
****

Prestigio: 0
Desconectado Desconectado

Sexo: Masculino
Mensajes: 8



« en: 02/08/2007, 16:42:45 »

Hola, es la primera vez que escribo en el foro, recien estoy ampezando a usar el C++ y tengo un problema con las "clases". El programa es el siguiente:

#include<iostream.h>
#include<conio.h>
#include<math.h>

/* CLASE CILINDRO */

class ccilindro
{       private:
        float radio,altura,volumen;

        public:
        ccilindro(float a1, float r1); // constructor 'ccilindro' (igual nombre que la clase);
        ~ccilindro(); // destructor del objeto 'ccilindro';
        void calcular(void);
        float ver_volumen(void);
};


ccilindro::ccilindro(float a1, float r1)
{       radio=r1;
        altura=a1;
};

void ccilindro::calcular(void)
{       volumen=M_PI*(pow(radio,2))*altura;
};

float ccilindro::ver_volumen(void)
{       return(volumen);
};


/* PROGRAMA PRINCIPAL */

void main(void)
{       float r,a;

        cout<<"\n PROGRAMA PARA CALULAR EL VOLUMEN DEL CILINDRO";
        cout<<endl<<endl;

        cout<<" DATOS DEL CILINDRO C1."<<endl<<endl;
        cout<<" Ingrese el radio: "; cin>>r;
        cout<<" Ingrese la altura: "; cin>>a;

        ccilindro c1(a,r); // llamada a la clase ccilindro a traves del contructor;
        c1.calcular();
        cout<<"\n Volumen de C1: "<<c1.ver_volumen();

        cout<<"\n\n\n Presione cualquier tecla para salir...";
        getch();
}

El problema es que al compilar, me tira el siguiente error:
[Linker Error] Unresolved external 'ccilindro::~ccilindro()' referenced from C:\PROGRAMACION\CBUILDER4\BORLAND\CBUILDER4\PROJECTS\PROJECT2.OBJ.

Supongo que el error no es de programacion, porque no me muestra ninguna linea con error, solo ese mensaje...
Y ademas, si le saco la linea:
~ccilindro(); // destructor del objeto 'ccilindro';

el programa anda bien, y no tira ningun error ni nada
gracias
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 02/08/2007, 19:30:08 »

Hola.

El problema es que te olvidaste de implementar el destructor.

Código:
ccilindro::~ccilindro()
{
};

O simplemente  podes quitar la línea de definición del destructor. Esta clase no la necesita.

Saludos.
En línea

freedman
Wizard
****

Prestigio: 0
Desconectado Desconectado

Sexo: Masculino
Mensajes: 8



« Respuesta #2 en: 04/08/2007, 13:56:23 »

ahora entiendo...

pero no se porque decis que esa clase no necesita el destructor...
en qué casos si se necesita destructor  y en qué casos no ?

 muchas gracias...
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #3 en: 04/08/2007, 14:51:19 »

Esa clase no necesita ejecutar un método al destruirse (el destructor) para liberar recursos solicitados con anterioridad, porque nunca los ha solicitado.
El destructor suele usarse precisamente para eso, para liberar todo lo que has pedido durante la vida de tu objeto, en este caso estas usando variables que se liberan automáticamente sin necesidad de utilizar el operador delete, por ejemplo.

Otro ejemplo sería si estas trabajando con archivos o bases de datos, tenes que cerrar el archivo o la conexión a la base de datos antes de destruir el objeto. Pero ese no es tu caso en esta clase.

Saludos.
En línea

Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: