Hola a todos,
He leído en un foro un problema que se podría parecer al mismo que tengo yo (id del otro hilo: 39309. está en c++ builder), pero no consigo arreglarlo con la misma solución.
Tengo un proyecto de VS2008. Originalmente, éste simula el comportamiento de un aire acondicionado, poniendo el valor de sus variables miembros (temperatura y humedad) en su constructor.
Aquí está el código original (o por lo menos lo más destacado para el asunto):
Simulation.h:
class Simulation {
...
/*
métodos virtuales puros
virtual bool getEstado(...);
virtual bool getDato(...);
virtual bool setDato(...);
*/
protected:
bool estado;
double temperatura;
};
class AireAcondicionadoSimulation: public Simulation {
/*
AireAcondicionadoSimulation();
bool getEstado(...);
bool getDato(...);
bool setDato(...);
*/
protected:
double humedad;
};
class CalderaSimulation: public Simulation {
...
};
simulation.cpp:
#include "simulation.h"
...
AireAcondicionadoSimulation::AireAcondicionadoSimulation()
{
estado = true;
temperatura = 23;
humedad = 50;
}
...
Lo que me gustaría hacer es un método estático en la clase Simulation donde cambie el valor de la temperatura (por ejemplo) con un valor pasado por teclado.
Lo primero que he hecho ha sido coger el valor por teclado y guardarlo en una variable en el main. A continuación, he creado el método estático en la clase AireAcondicionadoSimulation y, para finalizar, he cambiado en la clase Simulation la declaración de la variable miembro "temperatura" para hacerla estática.
Me explico:
simulation.h
class Simulation {
...
/*
Métodos virtuales públicos
virtual bool getEstado(...);
virtual bool getDato(...);
virtual bool setDato(...);
*/
protected:
bool estado;
[b]static double temperatura;[/b]
};
class AireAcondicionadoSimulation: public Simulation {
/*
AireAcondicionadoSimulation();
bool getEstado(...);
bool getDato(...);
bool setDato(...);
*/
[b]static bool cambiarT(double t);[/b]
protected:
double humedad;
};
class CalderaSimulation: public Simulation {
...
};
simulation.cpp
#include "simulation.h"
...
bool AireAcondicionadoSimulation::cambiarT(double t) {
temperatura = t;
return true;
}
AireAcondicionadoSimulation::AireAcondicionadoSimulation()
{
estado = true;
temperatura = 23;
humidedad = 50;
}
...
No pasa nada si la temperatuda al principio se pone a 23, pero me gustaría ir cambiándola durante la ejecución del programa mediante el teclado.
Lo que obtuve con todo ese código fueron los siguientes dos errores:
* "error LNK2001: unresolved external symbol protected: static double Simulation::temperatura (? temperatura@Simulation@@1NA)" en el archivo "simulation.obj".
* "fatal error LNK1120: 1 unresolved externals" en el archivo ejecutable
¿Qué es lo que estoy haciendo mal? ¿Podríais ayudarme o guiarme para poder solucionarlo? No hago más que dar vueltas y no consigo la solución.
Gracias a todos de antemano por vuestra ayuda
Saludos