我有这个问题:
在头文件中:
class D : public B
{
//...
private:
typedef char* (B::*psbposfun_t)() const;
static psbposfun_t ms_aposf[2][3];
//...
};
在源文件中:
D::psbposfun_t D::ms_aposf[2][3] =
{
{
&B::fa1,
&B::fa2,
&B::fa3
},
{
&B::fb1,
&B::fb2,
&B::fb3
}
};
编译器抱怨fa1 ... fb3方法受到保护。 实际上它们在B中受到保护,但我正在初始化属于D的成员,该成员来自B。
我尝试在类(D)中初始化ms_aposf,但编译器抱怨它不是初始化它的地方。
因此,除了在构造函数中实现一次性初始化之外,有人会知道如何规避这个问题吗?
答案 0 :(得分:1)
改为使用D::
:
D::psbposfun_t D::ms_aposf[2][3] =
{
{
&D::fa1,
&D::fa2,
&D::fa3
},
{
&D::fb1,
&D::fb2,
&D::fb3
}
};
由于D
继承了这些功能,因此可以通过D
访问它们,但可以用作B::
指针。