Reputation: 1304
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
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