I definitely agree that having a huge list of friend classes is bad, just to allow this operation.  But I don't think that making the setter public is a better solution, to be honest.  I don't have any strong objection other than "it feels a bit wrong to make it public".