Q:

Question about protected members in inheritance

I am lead to believe that protected members are accessible by inheriting classes.   So, what is my error in thought process in believing this is ok? 
I have some class, Food and Veg, where Veg inherits from Food.   Food has a protected member int age;  In the constructor of Veg, I try to initialize age to 0.   Why is this not valid? 
Some code...
Veg::Veg():age(0)
{
    cout << "Veg constructor."  << endl;
}

class Veg : public Food
{
//snip
};

class Food
{
//snip
protected:
    int age;
};

A:

In an initialization list for a constructor for a class C, you can only initialize 

direct base classes of class C, 
virtual base classes of class C, and 
nonstatic data members of class C.

If you want to initialize a data member of a base class, you need to do so either in the initialization list of the base class's constructor or in the body of the derived class's constructor.   You can't do it in the initialization list of the derived class's constructor.