The -> only deferences the pointer once, so you end up trying to access a member of a pointer. Since a pointer is not a class, that is illegal. If it helps, you can conceptually split it up:
1 2 3
//pp_Base->Member == (*pp_Base).Member
Base* ptr_to_Base = (*pp_Base);
ptr_to_Base.Member; //<-- Error, can't use the dot operator on a pointer like this, need to use ->
Thus, the correct way to do it would be to do this:
1 2 3
(*pp_Base)->Member = 0;
//dereference the pointer to pointer to get just a Base*, then use -> to deference it again
// and access Member
So pp_Base->Member is the same as (*pp_Base).Member
With that in mind.. since pp_Base is a pointer to a pointer, that means *pp_base is a pointer (not a BASE). Therefore you can't do .Member on it because pointers don't have any members.
The solution here would be to either dereference the pointer twice:
(**pp_Base).Member = 0;
or dereference it once and use the -> operator to deference it the 2nd time: