Here is the case. Static class memmbers must be initialized before using this class, because static members are not object-dependable. They occupy their own place of storage in the heap.
But I am confused about the regulations the initialization has to follow.

The code below explains my concern.

```
class TEST
{
public:
    ...
    static int val;
    ...
}
//Initialization
//int TEST::val = 1;//This is correct.
TEST::val = 1; //This is wrong, compiler msg: lack of type identifier.
//I think that the val member has been declared as int type.
//So WHY must I redeclare its type again? Or I did just miss something?

```