访问类对象类型C ++

时间:2009-09-30 00:37:44

标签: c++

如何在静态声明的私有成员函数中访问类对象类型?:

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.
}

静态强制转换和静态强制转换引用无法正常工作。

3 个答案:

答案 0 :(得分:1)

如果maxSize是X类的普通成员,那么您无法以这种方式访问​​它。你必须将它作为另一个参数传递给函数。

如果maxSize是该类的静态成员,则该代码应该有效。

如果这不是您要求的,那么您需要澄清您的问题,并可能添加更多代码,以显示您遇到的问题。


编辑:

在您的新示例中,您标记为“非法”的行实际上会编译您编写它的方式。 (它声明了一个名为X的本地myX指针,它只存在于该函数中。)

但我猜你的意思是:

int X::foo( const char * const key )
{
    myX = NULL;
}

这会失败,因为myX不是静态变量。静态函数无法访问普通成员变量。他们只能访问静态变量。

您需要修改您的设计:

  • 如果{/ 1}}适合您的计划,请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实例的指针,并且从你的代码中我不确定这是你的意图,也不知道你将使用该指针做什么。