Since there is no inheritance type specified, the default is private. Therefore your public and protected members become private and your private members are not accessible to your derived class. Your protected variable from A is then becoming private in B, which is then not accessible from C.
I think the solution is to use public inheritance:
C++ has 3 levels of inheritance (private, protected, and public). Although they are partially-related, these do not have the same meaning as the internal access levels within a class. Think of this version as meaning "the members of the base class will be shifted so that the public members will have the access level (inheritance level) in the derived class".
The 'public' inheritance level is the one you want for "true" inheritance. This level keeps the access levels of the base class' members the same as in the base class.
Using protected or private inheritance is more restrictive and less like "true" inheritance.