Ozan Yurtsever
Ozan Yurtsever

Reputation: 1304

Why do we need to specify the data type again when we define a static variable outside of the class

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.

Upvotes: 6

Views: 349

Answers (1)

Benjamin Bihler
Benjamin Bihler

Reputation: 2039

The second time you do not declare it. You define it. This is why this is typically done in an implementation file (.cpp) while the class declaration is done in a header file (.h).

Upvotes: 8

Related Questions