some remarks :
1) this is not a general programming board, what you are asking about, is regular c++
2) you only declared the static's you didn't define them :
solutions
a) in the header
static int m_count = 0;
static C_Object* m_pfirst = 0;
static C_Object* m_plast = 0; EDIT : this is NOT correct (only for const)
b) or you do the 'similar' actions in the cpp file
3) in case you want to reference count the number of objects, note that this code is not thread safe
Basically those static's are just plain global variables, which is not a good idea, and certainly not when you write to them. There are better solutions to count your number of instances
4) having 'member' variables as protected is not good, is nearly as bad as public. There are sound reasons to have member methods that are protected, but it is better to avoid these too. Every class which inherits from your class has access to the protected variables and as such you violate the open/close principle. You can not change that variables name (or remove it) anymore without breaking the classes that inherited from your class. So basically you showed your internals, just like a public would do. Inheritance is mostly about behavior and not about state.