我有一个程序,需要创建一个在 dll 和一些应用程序代码之间共享的基类。然后我有两个不同的派生类,一个在 dll 中,一个在主应用程序中。其中每个都有一些静态成员函数,它们对 nase 类中的数据进行操作。 (它们需要是静态的,因为在其他地方用作函数指针)。我的问题以最简单的形式如下所示。
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};
我的编译器抱怨我无法访问 pBase 的受保护成员,即使 Derived 对 Base 具有受保护的访问权限。有什么办法可以解决这个问题还是我误解了什么?
我可以将基本变量公开,但这会很糟糕,因为在我的实际实例中,这些是分配的内存块和保护它进行多线程的信号量。
Help?
一般来说(无论函数是否是静态的),
派生类的成员函数只能访问受保护的基类
其类型的对象的类成员。它无法访问受保护的
如果静态类型不是派生类的静态类型,则为基类成员
(或从它派生的类)。所以:
class Base {
protected:
int var;
} ;
class Derived : public Base {
static void f1( Derived* pDerived )
{
pDerived->var = 2; // legal, access through Derived...
}
static bool Process( Base *pBase )
{
pBase->var = 2 ; // illegal, access not through Derived...
}
} ;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)