C++ 将受保护的结构成员分配给朋友?

C++ 将受保护的结构成员分配给朋友?,c++,friend,access-rights,C++,Friend,Access Rights,我有一个类,它包含类似于类a的MyObject形式的数据。 我希望监视MyObject对象中的数据。所以我创建了一个IMonitorable类 从IMonitorable派生包含MyObject的所有my存储类。添加将IMonitorable类作为好友添加到我的监视类中 class IMonitorable {} class a : public IMonitorable { protected: struct myData { MyObject a;

我有一个类,它包含类似于类a的MyObject形式的数据。 我希望监视MyObject对象中的数据。所以我创建了一个IMonitorable类 从IMonitorable派生包含MyObject的所有my存储类。添加将IMonitorable类作为好友添加到我的监视类中

class IMonitorable
{}        

class a : public IMonitorable
{
protected:
   struct myData
   {
      MyObject a;
      MyObject b;
      ...
   } data;
}

class Monitor
{
public:
   friend IMonitorable;
   AddData(a& stroage);
   AddObject(MyObject& obj);

}
当我有一个存储类和一个已知的myData结构时,它工作得很好。我打电话

AddData(InstanceOfA);
并添加了对象a,b,。。我的监控机制

现在我有几个存储类,我不想为所有存储类编写AddData方法。我考虑使用AddObject方法,使其能够拥有适用于所有存储类的单点

AddObject(InstanceOfA.data.a);
AddObject(InstanceOfA.data.b);
...
但是如果我在代码中的某个地方调用它,gcc会抛出错误数据


是否有一种方法可以在不知道存储类结构的情况下将受保护MyObject的引用或指针添加到监视器?

您已声明
struct myData
为受保护
friend IMonitorable
IMonitorable
声明为friend类,这意味着
IMonitorable
可以访问
Monitor
类的私有成员。要从
Monitor
访问私有成员,请使用
getter
功能:

class a : public IMonitorable
{
public:
   const myData* const getData()const
   {
      return &data;
   }
   myData* getData()
   {
      return &data;
   }
protected:
   struct myData
   {
      MyObject a;
      MyObject b;
      ...
   } data;
}
使用它:

AddObject(InstanceOfA.getData()->a);

我看不清你到底在做什么,你把
a
作为一个类,然后作为myData的一个成员来使用,把事情搞混了

但我认为问题是,这种友谊并没有得到回报


您已使
IMonitorable
成为
Monitor
friend
,但这并不使
Monitor
成为
IMonitorable的
friend
,顺便说一下,即使你让它成为C++的朋友,但是它不能访问受保护的成员<代码> <代码>。请看:这个问题很令人困惑。花点时间检查代码,并确定您使用的一些术语(如存储)的含义。确保确定哪个对象正在尝试访问其他对象、错误是什么以及错误发生的位置。