如何在静态声明的私有成员函数中访问类对象类型?:
class Y
{
..
private:
friend class X;
X *myX;
};
class X
{
public:
friend class Y;
private:
static int foo( const char * const key );
Y *myX;
};
int X::foo( const char * const key )
{
X *myX = NULL; // illegal.
}
静态强制转换和静态强制转换引用无法正常工作。
答案 0 :(得分:1)
如果maxSize
是X类的普通成员,那么您无法以这种方式访问它。你必须将它作为另一个参数传递给函数。
如果maxSize
是该类的静态成员,则该代码应该有效。
如果这不是您要求的,那么您需要澄清您的问题,并可能添加更多代码,以显示您遇到的问题。
编辑:
在您的新示例中,您标记为“非法”的行实际上会编译您编写它的方式。 (它声明了一个名为X
的本地myX
指针,它只存在于该函数中。)
但我猜你的意思是:
int X::foo( const char * const key )
{
myX = NULL;
}
这会失败,因为myX
不是静态变量。静态函数无法访问普通成员变量。他们只能访问静态变量。
您需要修改您的设计:
myX
成为X
的静态成员。X::foo
成为非静态成员函数。X::foo
添加另一个参数,您可以通过该参数访问myX
。根据你想要的设计方式,有几种方法。以下是一个示例:int X::foo( const char * const key, X *& theXpointer )
答案 1 :(得分:0)
您无法在静态功能中访问成员数据。它只能访问静态数据和其他静态函数。如果需要一个类函数来处理对象的成员,则不应该将该函数声明为static,或者您需要将该对象作为参数传递给静态函数。
答案 2 :(得分:0)
当你说“访问类对象类型”时,我不确定你的意思。你编写的代码将允许你在静态X :: foo函数中使用X类型(当然,你必须从它返回一个值,因为你声明它返回一个int)。
当你编写它时,你正在声明一个指向X实例的指针,并且从你的代码中我不确定这是你的意图,也不知道你将使用该指针做什么。