From frD , please access b, c, d in ad. Also from frD , please also call the member functions Bop, Cop, and Dop on ad.
From an identical non-friend function (let us just call it an enemy) do exactly the same as in FrD.
Do you get the results (and the errors) you expect?
Can you arrange that frD can access/call all of b, c, d, Bop, Cop, and Dop?