Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问类对象类型C++;_C++ - Fatal编程技术网

C++ 访问类对象类型C++;

C++ 访问类对象类型C++;,c++,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;

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

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

静态强制转换和静态强制转换引用没有像我预期的那样工作。

如果
maxSize
是类X的正常成员,那么您不能以这种方式访问它。您必须将其作为另一个参数传递给函数


如果
maxSize
是该类的静态成员,那么该代码应该可以工作

如果这不是您要问的,那么您需要澄清您的问题,并可能添加一些代码来显示您遇到的问题


编辑:

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

但我猜你的意思是:

int X::foo( const char * const key )
{
    myX = NULL;
}
这将失败,因为
myX
不是一个静态变量。静态函数无法访问普通成员变量。他们只能访问静态变量

您需要修改您的设计:

  • 如果在您的程序中合适,可以使
    myX
    成为
    X
    的静态成员
  • 或者使
    X::foo
    成为非静态成员函数
  • 或者向
    X::foo
    添加另一个参数,通过该参数可以访问
    myX
    。根据你想如何设计东西,有几种方法。下面是一个示例:
    intx::foo(constchar*constkey,X*&theXpointer)

    • 您不能在静态函数中访问成员数据。它只能访问静态数据和其他静态函数。如果您需要一个类函数来作用于对象的成员,则不应将该函数声明为静态函数,或者需要将该对象作为参数传递给静态函数。

      我不确定您所说的“访问类对象类型”是什么意思。您编写的代码将允许您在静态X::foo函数中使用X类型(当然,您必须从它返回一个值,因为您已经声明它返回一个int)


      正如您所写的,您正在声明一个指向X实例的指针,并且从您的代码中,我不确定这是否是您想要的,或者您将如何使用该指针。

      您应该以可读的方式格式化您的代码……并接受您其他问题的一些答案。10分钟是做这些事情的截止时间吗?=/s在哪里示例中的静态强制转换或静态强制转换引用?您的问题是什么?您的代码示例缺少问题的一些重要元素。。。