C++ 将受保护的结构成员分配给朋友?
我有一个类,它包含类似于类a的MyObject形式的数据。 我希望监视MyObject对象中的数据。所以我创建了一个IMonitorable类 从IMonitorable派生包含MyObject的所有my存储类。添加将IMonitorable类作为好友添加到我的监视类中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;
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++的朋友,但是它不能访问受保护的成员<代码> <代码>。请看:这个问题很令人困惑。花点时间检查代码,并确定您使用的一些术语(如存储)的含义。确保确定哪个对象正在尝试访问其他对象、错误是什么以及错误发生的位置。