Here is a simple example:

Code:
struct E{
public:
	static int c;
	E() {c++;}
	~E(){c--;}
};

//int E::c=0;
int main(){
	E e;
	return 0;
}
We can see if we declare c as "int c" rather than "static int c", it can compile. When c is declared as "static int c", it can't compile without "int E::c=0;". Why is that?