Static variables are saved in a different part of memory than any instance of a class. This is because they are not a PART of an instance of any class.
The code below compiles because the function t is never called.
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;
}
However, this code doesn't complie, because t is called
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;
}
You are allowed to have undefined references you don't use in C++ (and C for that matter). For some reason, I am unsure of, the compiler seems to think this code is referencing i, when the stuff above that complies was not referencing it until called (any ideas as to why)?
class TT
{
private:
static int i;
public:
void t();
};
//int TT::i = 0;
void TT::t(){
i=0;
}
Functional example, with the static defined:
class TT
{
private:
static int i;
public:
void t();
};
int TT::i = 0;
void TT::t(){
i=0;
}