But tutorials say derived classes may access protected members of the base ones.
To my knowledge that means that the Derived classes also have the members of the Base classes implicitly declared. It doesn't mean that an object of a Derived class can access the private or protected members of an object of its Base class. If you want that, look up friend functions and friend classes:
Line 19 fails because you cannot access a protected member of another class. The paramter of the function is another type (not Second) so you cannot access it's protected or private members.