| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Invitado
|
Publicado: Lun 03 Feb, 2003 10:27 am Asunto: Problemas con static y clases virtuales |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 03 Feb, 2003 12:21 pm Asunto: |
|
|
Prueba inicializando la variable estática:
static int TBase::Numero = 0; |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 03 Feb, 2003 1:33 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 03 Feb, 2003 2:54 pm Asunto: |
|
|
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 |
|
 |
Invitado
|
Publicado: Lun 03 Feb, 2003 4:00 pm Asunto: |
|
|
Gracias Leo por tu inestimable ayuda. Ahora lo aplicaré en el problema real, haber como queda.
Un saludo. |
|
| Volver arriba |
|
 |
|