I've been solving hackerrank questions. I've encountered with a virtual function question and I've been asked to create a class named Student . This class must have a int variable named cur_id ( current id). Here is the class;
class Student: public Person{
    public:
    static int id;
    Student(){
        cur_id = ++id;
    }
};
int Student::id = 0;
I've been asked to increase the cur_id +1 while every new object of the class is being created. So that, i decided to increase the cur_id in the constructor. As you can see, I've declared a static int variable in the class as static int id.  Then I wanted to initialize its value with zero out of the class. But when I tried it as Student::id = 0;, I couldn't access the id variable. I needed to specify its datatype one more time like I am declaring the variable again as int Student::id = 0;. What's the reason of it, why do I need to declare a static variable two time ? I know that it's a newbie question and may have an easy answer, but I couldn't find my answer in another topics. Thanks in advance.
 
    