在C++中,我有一个与B类成为 friend 的A类。
我看起来像继承的B类不是A类的 friend 。
我这是C++的限制还是我的错误?
这是一个例子。编译时,在“返回新的备忘录”行中出现错误:
Memento::Memento:无法访问在Memento中声明的私有(private)成员。
class Originator;
class Memento
{
friend class Originator;
Memento() {};
int m_Data;
public:
~Memento() {};
};
class Originator
{
public:
virtual Memento* createMemento() = 0;
};
class FooOriginator : public Originator
{
public:
Memento* createMemento()
{
return new Memento; // Impossible to access private member of Memento
}
};
void main()
{
FooOriginator MyOriginator;
MyOriginator.createMemento();
}
我当然可以将FooOriginator添加为Memento的 friend ,但是,这意味着我必须将所有Originator继承的类添加为Memento的 friend ,这是我想避免的事情。
任何的想法 ?
最佳答案
另请:Friend scope in C++
投票完全相同。
I looks like inherited classes of B are not friend of class A.
正确的
I this a limitation of C++ or my mistake ?
这就是C++的工作方式。我不认为这是一个限制。