Las variables estáticas se guardan en una parte diferente de la memoria que cualquier instancia de una clase. Esto se debe a que no son PARTE de una instancia de ninguna clase.
El siguiente código se compila porque nunca se llama a la función t.
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
//t->t();
return 0;
}
Sin embargo, este código no complie, porque t se llama
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
t->t();
return 0;
}
Se le permite tener referencias indefinidas que no utiliza en C++ (y C para el caso). Por alguna razón, no estoy seguro, el compilador parece pensar que este código hace referencia a i, cuando el material que está arriba no lo hace referencia hasta que se lo llama (¿alguna idea de por qué?)
class TT
{
private:
static int i;
public:
void t();
};
//int TT::i = 0;
void TT::t(){
i=0;
}
ejemplo funcional, con la estática definida:
class TT
{
private:
static int i;
public:
void t();
};
int TT::i = 0;
void TT::t(){
i=0;
}
+1 Eliminado mi respuesta porque me di cuenta de que lo has enganchado. – Lou
funciona, gracias – user956159