C++ 初始化指向受保护成员函数的指针
我有一个问题: 在头文件中:C++ 初始化指向受保护成员函数的指针,c++,initialization,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, &am
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++?(新加坡国家公园)。。。该示例使用VS2013编译,但当然成员函数必须是const。您使用哪种编译器?是的,将函数公开可以满足gcc的要求。这看起来并不正确,尽管它相当深奥。上帝!这么简单,我应该删除我的问题@迈特巴特:我觉得这是个有趣的问题。受保护访问的工作方式并不一定显而易见。它不像“只有这个类或派生类可以访问它”那么简单。这更像是“为了访问,允许将基类成员视为私有派生类成员”。