我有这个问题:
在头文件中:
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,但编译器提示它不是初始化它的地方。
那么除了在构造函数中实现一次性初始化之外,有人知道如何规避这个问题吗?
最佳答案
改用D::
:
D::psbposfun_t D::ms_aposf[2][3] =
{
{
&D::fa1,
&D::fa2,
&D::fa3
},
{
&D::fb1,
&D::fb2,
&D::fb3
}
};
由于 D
继承了这些函数,它们可以通过 D
访问,但可用作 B::
指针。
关于c++ - 初始化指向 protected 成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419664/