В C ++ у меня есть класс A, который дружит с классом B.
Похоже, унаследованные классы B не являются друзьями класса A.
Это ограничение C ++ или моя ошибка?
Вот пример. При компиляции я получаю сообщение об ошибке "return new Memento":
Memento :: Memento: невозможно получить доступ к приватному участнику, объявленному в Memento.
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, но тогда это означает, что мне придется добавить все классы, унаследованные от Originator, в качестве друга Memento, чего я бы хотел избежать.
Есть идеи?