c++ - 初始化指向 protected 成员函数的指针

标签 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,但编译器提示它不是初始化它的地方。

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

最佳答案

改用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/

相关文章:

c++ - 获取命令行() : unable to pass multiline arguments from batch-file (GCC-Compiler)

C++ - 无法从 Windows 中的网络路径打开文件

c++ - 没有默认构造函数的值初始化

Scala - 处理对象的初始化(_ vs Option[T])

c# - 非静态字段、方法或属性需要对象引用

c++ - 为什么我必须用括号括起作为逗号表达式的初始化表达式?

C++ stringstream >> int 返回零

C++ 异常/继承错误 LNK2019

c++ - 将 std::string 转换为无符号字符数组

c++ - 如何用字符串文字优雅地初始化 vector<char *>?