Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas con static y clases virtuales

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas con static y clases virtuales Responder citando

Hola a todos. Mi problema es que tengo creada una clase virtual que posee un mienbro estático. La idea es que cuando cree un objeto de una subclase, el constructor padre detecte que la variable estática ya tiene un valor y por lo tanto no lo modifique. Un ejemplo que he creado.

//Clase Virtual.
class TBase
{
private:
static int Numero;
public:
TBase(void);
virtual int VerNumero(void){return TBase::Numero;}
virtual int HacerAlgo(void)=0;
};


//Clase Hija
class THija : public TBase
{
private:
int Minum;
public:
THija(void);
int HacerAlgo(void){return Minum;}
};

//-------------------------------------------
EN EL .CPP

TBase::TBase(void)
{
if(Numero != 3)
Numero = 3;
else
Numero = 6;
}



THija::THija(void)
{
Minum = 8;
}

Esto me genera un error al linkar que es el siguiente:
[Linker Error] Unresolved external 'TBase::Numero' ....

Ayudadme con esto. Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

Prueba inicializando la variable estática:

static int TBase::Numero = 0;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo, pero no me ha funcionado. La intención de todo esto, es la siguiente:

Tengo una clase virtual cuyo constructor realiza un chequeo de la conexión a una base de datos y si todo va bien, mantiene la conexión hasta que se destruye el objeto. Lo que yo pretendo es que cuando una subclase de la clase virtual se ejecute, no cree otra conexión a la base de datos si ya existe una y así evitar múltiples conexiones que me consumirían demasiados recursos. Lo que he hecho finalmente es definir en la parte private de la clase virtual un puntero de tipo TADOConnection y en el constructor de dicha clase he establecido un objeto TADOConnection como estático y así le paso la dirección del objeto al puntero miembro de la clase. De este modo puedo comprobar si ya existe una conexión o si debo crearla.

Bueno, me he liado un cacho, pero no se me ha ocurrido otra manera de explicarlo, también estoy seguro de que todo este entríngulis podía hacerse de otra manera, os escucho.

Saludos.
Volver arriba
Mensaje    Asunto: Responder citando

Se me ha colado un "static", quedaria:

int TBase::Numero = 0;

He probado el código que has puesto y me da el mismo error, al inicializar esa variable (fuera de las clases) me funciona correctamente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo por tu inestimable ayuda. Ahora lo aplicaré en el problema real, haber como queda.

Un saludo.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.