【发布时间】:2019-08-19 18:57:52
【问题描述】:
我正在做一个小项目,但我有点卡住了,因为我真的不明白友谊和继承是如何相互作用的。我给你看一些示例代码。
namespace a
{
class Foo
{
public:
Foo(int x) : m_x(x) {}
protected:
friend class b::Derived;
friend class a::Base;
int m_x;
};
class Base
{
public:
Base(Foo foo) : m_foo(foo) {}
protected:
Foo m_foo;
};
}
namespace b
{
class Derived : public a::Base
{
public:
Derived(a::Foo foo)
: Base(foo)
{
m_foo.m_x;
}
};
}
e0265: at line 29: member a::Foo::m_x (declared at line 10) is inaccessible
显然Derived不能访问Foo的protected成员,貌似是因为Derived::m_foo是派生成员,所以构造Derived会失败。谁能给我详细解释一下?
【问题讨论】:
-
请发布minimal reproducible example 和完整的编译器错误消息。最可能的问题是您需要将
Base()的实现更改为Base() : m_foo(0) {} -
Your code works just fine。只有一个问题是
Base::m_foo需要用int初始化。 -
Foo没有任何私人成员。那么真正的问题是什么?
标签: c++ inheritance friend