初始化指向受保护成员函数的指针

时间:2014-03-15 04:47:49

标签: c++ initialization

我有这个问题:

在头文件中:

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,但编译器抱怨它不是初始化它的地方。

因此,除了在构造函数中实现一次性初始化之外,有人会知道如何规避这个问题吗?

1 个答案:

答案 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::指针。